[llvm] 525af9f - [MC] Omit fill value if it's zero when emitting code alignment

Stephen Long via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 25 10:07:49 PDT 2022


Author: Stephen Long
Date: 2022-08-25T10:07:33-07:00
New Revision: 525af9f8eb51b1eb2c800eee116a0c81e1d5a5da

URL: https://github.com/llvm/llvm-project/commit/525af9f8eb51b1eb2c800eee116a0c81e1d5a5da
DIFF: https://github.com/llvm/llvm-project/commit/525af9f8eb51b1eb2c800eee116a0c81e1d5a5da.diff

LOG: [MC] Omit fill value if it's zero when emitting code alignment

Previously, we were generating zeroes when generating code alignments for AArch64, but now we should omit the value and let the assembler choose to generate nops or zeroes.

Reviewed By: efriedma, MaskRay

Differential Revision: https://reviews.llvm.org/D132508

Added: 
    llvm/test/CodeGen/AArch64/p2align-zero-fillvalue.ll

Modified: 
    llvm/lib/MC/MCAsmStreamer.cpp
    llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes-neoverse.ll
    llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes.ll
    llvm/test/CodeGen/AArch64/aarch64-sched-store.ll
    llvm/test/CodeGen/AArch64/arm64-promote-const-complex-initializers.ll
    llvm/test/CodeGen/AArch64/merge-store-dependency.ll
    llvm/test/CodeGen/ARM/byval_load_align.ll
    llvm/test/CodeGen/WebAssembly/global.ll
    llvm/test/DebugInfo/COFF/globals.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index e96aa79b6a820..efb1a03aca3be 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -245,6 +245,9 @@ class MCAsmStreamer final : public MCStreamer {
   void emitFill(const MCExpr &NumValues, int64_t Size, int64_t Expr,
                 SMLoc Loc = SMLoc()) override;
 
+  void emitAlignmentDirective(unsigned ByteAlignment, Optional<int64_t> Value,
+                              unsigned ValueSize, unsigned MaxBytesToEmit);
+
   void emitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0,
                             unsigned ValueSize = 1,
                             unsigned MaxBytesToEmit = 0) override;
@@ -1394,9 +1397,10 @@ void MCAsmStreamer::emitFill(const MCExpr &NumValues, int64_t Size,
   EmitEOL();
 }
 
-void MCAsmStreamer::emitValueToAlignment(unsigned ByteAlignment, int64_t Value,
-                                         unsigned ValueSize,
-                                         unsigned MaxBytesToEmit) {
+void MCAsmStreamer::emitAlignmentDirective(unsigned ByteAlignment,
+                                           Optional<int64_t> Value,
+                                           unsigned ValueSize,
+                                           unsigned MaxBytesToEmit) {
   if (MAI->useDotAlignForAlignment()) {
     if (!isPowerOf2_32(ByteAlignment))
       report_fatal_error("Only power-of-two alignments are supported "
@@ -1428,9 +1432,13 @@ void MCAsmStreamer::emitValueToAlignment(unsigned ByteAlignment, int64_t Value,
 
     OS << Log2_32(ByteAlignment);
 
-    if (Value || MaxBytesToEmit) {
-      OS << ", 0x";
-      OS.write_hex(truncateToSize(Value, ValueSize));
+    if (Value.has_value() || MaxBytesToEmit) {
+      if (Value.has_value()) {
+        OS << ", 0x";
+        OS.write_hex(truncateToSize(Value.value(), ValueSize));
+      } else {
+        OS << ", ";
+      }
 
       if (MaxBytesToEmit)
         OS << ", " << MaxBytesToEmit;
@@ -1450,18 +1458,30 @@ void MCAsmStreamer::emitValueToAlignment(unsigned ByteAlignment, int64_t Value,
   }
 
   OS << ' ' << ByteAlignment;
-  OS << ", " << truncateToSize(Value, ValueSize);
+  if (Value.has_value())
+    OS << ", " << truncateToSize(Value.value(), ValueSize);
+  else if (MaxBytesToEmit)
+    OS << ", ";
   if (MaxBytesToEmit)
     OS << ", " << MaxBytesToEmit;
   EmitEOL();
 }
 
+void MCAsmStreamer::emitValueToAlignment(unsigned ByteAlignment, int64_t Value,
+                                         unsigned ValueSize,
+                                         unsigned MaxBytesToEmit) {
+  emitAlignmentDirective(ByteAlignment, Value, ValueSize, MaxBytesToEmit);
+}
+
 void MCAsmStreamer::emitCodeAlignment(unsigned ByteAlignment,
                                       const MCSubtargetInfo *STI,
                                       unsigned MaxBytesToEmit) {
   // Emit with a text fill value.
-  emitValueToAlignment(ByteAlignment, MAI->getTextAlignFillValue(),
-                       1, MaxBytesToEmit);
+  if (MAI->getTextAlignFillValue())
+    emitAlignmentDirective(ByteAlignment, MAI->getTextAlignFillValue(), 1,
+                           MaxBytesToEmit);
+  else
+    emitAlignmentDirective(ByteAlignment, None, 1, MaxBytesToEmit);
 }
 
 void MCAsmStreamer::emitValueToOffset(const MCExpr *Offset,

diff  --git a/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes-neoverse.ll b/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes-neoverse.ll
index b30ff8f2176d1..ec8fd3aa38022 100644
--- a/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes-neoverse.ll
+++ b/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes-neoverse.ll
@@ -14,12 +14,12 @@
 
 define i32 @a(i32 %x, i32* nocapture readonly %y, i32* nocapture readonly %z) {
 ; CHECK-DEFAULT:    .p2align 5
-; CHECK-8:          .p2align 4, 0x0, 8
-; CHECK-16:         .p2align 5, 0x0, 16
+; CHECK-8:          .p2align 4, , 8
+; CHECK-16:         .p2align 5, , 16
 ; CHECK-NEXT:       .LBB0_5: // %vector.body
 ; CHECK-DEFAULT:    .p2align 5
-; CHECK-8:          .p2align 4, 0x0, 8
-; CHECK-16:         .p2align 5, 0x0, 16
+; CHECK-8:          .p2align 4, , 8
+; CHECK-16:         .p2align 5, , 16
 ; CHECK-NEXT:       .LBB0_8: // %for.body
 entry:
   %cmp10 = icmp sgt i32 %x, 0

diff  --git a/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes.ll b/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes.ll
index 7601afc961ec1..a3dff36aba2da 100644
--- a/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes.ll
+++ b/llvm/test/CodeGen/AArch64/aarch64-p2align-max-bytes.ll
@@ -9,10 +9,10 @@
 ; should be the same, at 
diff erent locations)
 define i32 @a(i32 %x, i32* nocapture readonly %y, i32* nocapture readonly %z) {
 ; CHECK-LABEL: a:
-; CHECK-EXPLICIT:    .p2align 5, 0x0, 8
+; CHECK-EXPLICIT:    .p2align 5, , 8
 ; CHECK-IMPLICIT:    .p2align 5
 ; CHECK-NEXT:  .LBB0_5: // %vector.body
-; CHECK-EXPLICIT:    .p2align 5, 0x0, 8
+; CHECK-EXPLICIT:    .p2align 5, , 8
 ; CHECK-IMPLICIT:    .p2align 5
 ; CHECK-NEXT:  .LBB0_8: // %for.body
 ; CHECK-OBJ;Disassembly of section .text:

diff  --git a/llvm/test/CodeGen/AArch64/aarch64-sched-store.ll b/llvm/test/CodeGen/AArch64/aarch64-sched-store.ll
index b1d2ad62d2469..e01ef7b9eb348 100644
--- a/llvm/test/CodeGen/AArch64/aarch64-sched-store.ll
+++ b/llvm/test/CodeGen/AArch64/aarch64-sched-store.ll
@@ -9,7 +9,7 @@ define dso_local void @memset_unroll2(double* nocapture %array, i64 %size) {
 ; DEFAULT:       // %bb.0: // %entry
 ; DEFAULT-NEXT:    fmov v0.2d, #2.00000000
 ; DEFAULT-NEXT:    add x8, x0, #64
-; DEFAULT-NEXT:    .p2align 4, 0x0, 8
+; DEFAULT-NEXT:    .p2align 4, , 8
 ; DEFAULT-NEXT:  .LBB0_1: // %vector.body
 ; DEFAULT-NEXT:    // =>This Inner Loop Header: Depth=1
 ; DEFAULT-NEXT:    stur q0, [x8, #-64]
@@ -30,7 +30,7 @@ define dso_local void @memset_unroll2(double* nocapture %array, i64 %size) {
 ; ASCEND:       // %bb.0: // %entry
 ; ASCEND-NEXT:    fmov v0.2d, #2.00000000
 ; ASCEND-NEXT:    add x8, x0, #64
-; ASCEND-NEXT:    .p2align 4, 0x0, 8
+; ASCEND-NEXT:    .p2align 4, , 8
 ; ASCEND-NEXT:  .LBB0_1: // %vector.body
 ; ASCEND-NEXT:    // =>This Inner Loop Header: Depth=1
 ; ASCEND-NEXT:    stur q0, [x8, #-64]

diff  --git a/llvm/test/CodeGen/AArch64/arm64-promote-const-complex-initializers.ll b/llvm/test/CodeGen/AArch64/arm64-promote-const-complex-initializers.ll
index 6a6bf9d4cba1e..b0ce3331f5b0c 100644
--- a/llvm/test/CodeGen/AArch64/arm64-promote-const-complex-initializers.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-promote-const-complex-initializers.ll
@@ -8,7 +8,7 @@ target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
 target triple = "arm64-apple-ios14.0.0"
 
 define [1 x <4 x float>] @test1() {
-; CHECK-LABEL:    .p2align    4               ; -- Begin function test1
+; CHECK-LABEL:    .p2align    4, 0x0              ; -- Begin function test1
 ; CHECK-NEXT: lCPI0_0:
 ; CHECK-NEXT:     .quad   0                       ; 0x0
 ; CHECK-NEXT:     .quad   4575657221408423936     ; 0x3f80000000000000
@@ -28,7 +28,7 @@ define [1 x <4 x float>] @test1() {
 }
 
 define [1 x <4 x float>] @test2() {
-; CHECK-LABEL:    .p2align    4               ; -- Begin function test2
+; CHECK-LABEL:    .p2align    4, 0x0              ; -- Begin function test2
 ; CHECK-NEXT: lCPI1_0:
 ; CHECK-NEXT:     .long   0x00000000              ; float 0
 ; CHECK-NEXT:     .long   0x00000000              ; float 0

diff  --git a/llvm/test/CodeGen/AArch64/merge-store-dependency.ll b/llvm/test/CodeGen/AArch64/merge-store-dependency.ll
index 9218ac57018e9..1c962315954c4 100644
--- a/llvm/test/CodeGen/AArch64/merge-store-dependency.ll
+++ b/llvm/test/CodeGen/AArch64/merge-store-dependency.ll
@@ -36,7 +36,7 @@ define void @test(%struct1* %fde, i32 %fd, void (i32, i32, i8*)* %func, i8* %arg
 ; A53-NEXT:  // %bb.1:
 ; A53-NEXT:    ldr w8, [x19]
 ; A53-NEXT:    ldr w9, [x9]
-; A53-NEXT:    .p2align 4, 0x0, 8
+; A53-NEXT:    .p2align 4, , 8
 ; A53-NEXT:  .LBB0_2: // %while.body.i.split.ver.us
 ; A53-NEXT:    // =>This Inner Loop Header: Depth=1
 ; A53-NEXT:    lsl w9, w9, #1
@@ -51,7 +51,7 @@ define void @test(%struct1* %fde, i32 %fd, void (i32, i32, i8*)* %func, i8* %arg
 ; A53-NEXT:    .cfi_restore w19
 ; A53-NEXT:    .cfi_restore w30
 ; A53-NEXT:    ret
-; A53-NEXT:    .p2align 4, 0x0, 8
+; A53-NEXT:    .p2align 4, , 8
 ; A53-NEXT:  .LBB0_4: // %while.body.i.split
 ; A53-NEXT:    // =>This Inner Loop Header: Depth=1
 ; A53-NEXT:    .cfi_restore_state

diff  --git a/llvm/test/CodeGen/AArch64/p2align-zero-fillvalue.ll b/llvm/test/CodeGen/AArch64/p2align-zero-fillvalue.ll
new file mode 100644
index 0000000000000..e0606617ff197
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/p2align-zero-fillvalue.ll
@@ -0,0 +1,8 @@
+; RUN: llc -mtriple=aarch64 < %s -o - | FileCheck %s
+
+%struct.A = type { i8, i32 }
+ at foo = dso_local global %struct.A zeroinitializer, align 4
+
+; CHECK:      .bss
+; CHECK-NEXT: .globl foo
+; CHECK-NEXT: .p2align 2, 0x0{{$}}

diff  --git a/llvm/test/CodeGen/ARM/byval_load_align.ll b/llvm/test/CodeGen/ARM/byval_load_align.ll
index eb34badc8d566..90eaa333bb0d5 100644
--- a/llvm/test/CodeGen/ARM/byval_load_align.ll
+++ b/llvm/test/CodeGen/ARM/byval_load_align.ll
@@ -7,7 +7,7 @@
 ; CHECK: ldr r2, [r[[REG]], #4]
 ; CHECK: ldr r3, [r[[REG]], #8]
 ; CHECK-NOT: ldm
-; CHECK: .p2align	1 @ @sID
+; CHECK: .p2align	1, 0x0 @ @sID
 
 %struct.ModuleID = type { [32 x i8], [32 x i8], i16 }
 

diff  --git a/llvm/test/CodeGen/WebAssembly/global.ll b/llvm/test/CodeGen/WebAssembly/global.ll
index f5fefc3916848..c3f6b2e23e4a4 100644
--- a/llvm/test/CodeGen/WebAssembly/global.ll
+++ b/llvm/test/CodeGen/WebAssembly/global.ll
@@ -29,7 +29,7 @@ define i8* @call_memcpy(i8* %p, i8* nocapture readonly %q, i32 %n) {
 }
 
 ; CHECK: .type   .Lg, at object
-; CHECK: .p2align  2{{$}}
+; CHECK: .p2align  2, 0x0{{$}}
 ; CHECK-NEXT: .Lg:
 ; CHECK-NEXT: .int32 1337{{$}}
 ; CHECK-NEXT: .size .Lg, 4{{$}}
@@ -41,140 +41,140 @@ define i8* @call_memcpy(i8* %p, i8* nocapture readonly %q, i32 %n) {
 @ud = internal global i32 undef
 
 ; CHECK: .type nil, at object
-; CHECK: .p2align 2
+; CHECK: .p2align 2, 0x0
 ; CHECK: nil:
 ; CHECK: .int32 0
 ; CHECK: .size nil, 4
 @nil = internal global i32 zeroinitializer
 
 ; CHECK: .type z, at object
-; CHECK: .p2align 2
+; CHECK: .p2align 2, 0x0
 ; CHECK: z:
 ; CHECK: .int32 0
 ; CHECK: .size z, 4
 @z = internal global i32 0
 
 ; CHECK: .type one, at object
-; CHECK: .p2align 2{{$}}
+; CHECK: .p2align 2, 0x0{{$}}
 ; CHECK-NEXT: one:
 ; CHECK-NEXT: .int32 1{{$}}
 ; CHECK-NEXT: .size one, 4{{$}}
 @one = internal global i32 1
 
 ; CHECK: .type answer, at object
-; CHECK: .p2align 2{{$}}
+; CHECK: .p2align 2, 0x0{{$}}
 ; CHECK-NEXT: answer:
 ; CHECK-NEXT: .int32 42{{$}}
 ; CHECK-NEXT: .size answer, 4{{$}}
 @answer = internal global i32 42
 
 ; CHECK: .type u32max, at object
-; CHECK: .p2align 2{{$}}
+; CHECK: .p2align 2, 0x0{{$}}
 ; CHECK-NEXT: u32max:
 ; CHECK-NEXT: .int32 4294967295{{$}}
 ; CHECK-NEXT: .size u32max, 4{{$}}
 @u32max = internal global i32 -1
 
 ; CHECK: .type ud64, at object
-; CHECK: .p2align 3{{$}}
+; CHECK: .p2align 3, 0x0{{$}}
 ; CHECK-NEXT: ud64:
 ; CHECK-NEXT: .skip 8{{$}}
 ; CHECK-NEXT: .size ud64, 8{{$}}
 @ud64 = internal global i64 undef
 
 ; CHECK: .type nil64, at object
-; CHECK: .p2align 3{{$}}
+; CHECK: .p2align 3, 0x0{{$}}
 ; CHECK-NEXT: nil64:
 ; CHECK-NEXT: .int64 0{{$}}
 ; CHECK-NEXT: .size nil64, 8{{$}}
 @nil64 = internal global i64 zeroinitializer
 
 ; CHECK: .type z64, at object
-; CHECK: .p2align 3{{$}}
+; CHECK: .p2align 3, 0x0{{$}}
 ; CHECK-NEXT: z64:
 ; CHECK-NEXT: .int64 0{{$}}
 ; CHECK-NEXT: .size z64, 8{{$}}
 @z64 = internal global i64 0
 
 ; CHECK: .type twoP32, at object
-; CHECK: .p2align 3{{$}}
+; CHECK: .p2align 3, 0x0{{$}}
 ; CHECK-NEXT: twoP32:
 ; CHECK-NEXT: .int64 4294967296{{$}}
 ; CHECK-NEXT: .size twoP32, 8{{$}}
 @twoP32 = internal global i64 4294967296
 
 ; CHECK: .type u64max, at object
-; CHECK: .p2align 3{{$}}
+; CHECK: .p2align 3, 0x0{{$}}
 ; CHECK-NEXT: u64max:
 ; CHECK-NEXT: .int64 -1{{$}}
 ; CHECK-NEXT: .size u64max, 8{{$}}
 @u64max = internal global i64 -1
 
 ; CHECK: .type f32ud, at object
-; CHECK: .p2align 2{{$}}
+; CHECK: .p2align 2, 0x0{{$}}
 ; CHECK-NEXT: f32ud:
 ; CHECK-NEXT: .skip 4{{$}}
 ; CHECK-NEXT: .size f32ud, 4{{$}}
 @f32ud = internal global float undef
 
 ; CHECK: .type f32nil, at object
-; CHECK: .p2align 2{{$}}
+; CHECK: .p2align 2, 0x0{{$}}
 ; CHECK-NEXT: f32nil:
 ; CHECK-NEXT: .int32 0x00000000{{$}}
 ; CHECK-NEXT: .size f32nil, 4{{$}}
 @f32nil = internal global float zeroinitializer
 
 ; CHECK: .type f32z, at object
-; CHECK: .p2align 2{{$}}
+; CHECK: .p2align 2, 0x0{{$}}
 ; CHECK-NEXT: f32z:
 ; CHECK-NEXT: .int32 0x00000000{{$}}
 ; CHECK-NEXT: .size f32z, 4{{$}}
 @f32z = internal global float 0.0
 
 ; CHECK: .type f32nz, at object
-; CHECK: .p2align 2{{$}}
+; CHECK: .p2align 2, 0x0{{$}}
 ; CHECK: f32nz:
 ; CHECK: .int32 0x80000000{{$}}
 ; CHECK: .size f32nz, 4{{$}}
 @f32nz = internal global float -0.0
 
 ; CHECK: .type f32two, at object
-; CHECK: .p2align 2{{$}}
+; CHECK: .p2align 2, 0x0{{$}}
 ; CHECK-NEXT: f32two:
 ; CHECK-NEXT: .int32 0x40000000{{$}}
 ; CHECK-NEXT: .size f32two, 4{{$}}
 @f32two = internal global float 2.0
 
 ; CHECK: .type f64ud, at object
-; CHECK: .p2align 3{{$}}
+; CHECK: .p2align 3, 0x0{{$}}
 ; CHECK-NEXT: f64ud:
 ; CHECK-NEXT: .skip 8{{$}}
 ; CHECK-NEXT: .size f64ud, 8{{$}}
 @f64ud = internal global double undef
 
 ; CHECK: .type f64nil, at object
-; CHECK: .p2align 3{{$}}
+; CHECK: .p2align 3, 0x0{{$}}
 ; CHECK-NEXT: f64nil:
 ; CHECK-NEXT: .int64 0x0000000000000000{{$}}
 ; CHECK-NEXT: .size f64nil, 8{{$}}
 @f64nil = internal global double zeroinitializer
 
 ; CHECK: .type f64z, at object
-; CHECK: .p2align 3{{$}}
+; CHECK: .p2align 3, 0x0{{$}}
 ; CHECK-NEXT: f64z:
 ; CHECK-NEXT: .int64 0x0000000000000000{{$}}
 ; CHECK-NEXT: .size f64z, 8{{$}}
 @f64z = internal global double 0.0
 
 ; CHECK: .type f64nz, at object
-; CHECK: .p2align 3{{$}}
+; CHECK: .p2align 3, 0x0{{$}}
 ; CHECK-NEXT: f64nz:
 ; CHECK-NEXT: .int64 0x8000000000000000{{$}}
 ; CHECK-NEXT: .size f64nz, 8{{$}}
 @f64nz = internal global double -0.0
 
 ; CHECK: .type f64two, at object
-; CHECK: .p2align 3{{$}}
+; CHECK: .p2align 3, 0x0{{$}}
 ; CHECK-NEXT: f64two:
 ; CHECK-NEXT: .int64 0x4000000000000000{{$}}
 ; CHECK-NEXT: .size f64two, 8{{$}}
@@ -193,7 +193,7 @@ define i8* @call_memcpy(i8* %p, i8* nocapture readonly %q, i32 %n) {
 ; CHECK: .type    rom, at object{{$}}
 ; CHECK: .section .rodata.rom,""
 ; CHECK: .globl   rom{{$}}
-; CHECK: .p2align   4{{$}}
+; CHECK: .p2align   4, 0x0{{$}}
 ; CHECK: rom:
 ; CHECK: .skip    512{{$}}
 ; CHECK: .size    rom, 512{{$}}
@@ -206,7 +206,7 @@ define i8* @call_memcpy(i8* %p, i8* nocapture readonly %q, i32 %n) {
 ; CHECK: .type       pointer_to_array, at object
 ; CHECK-NEXT: .section    .rodata.pointer_to_array,""
 ; CHECK-NEXT: .globl      pointer_to_array
-; CHECK-NEXT: .p2align      2
+; CHECK-NEXT: .p2align      2, 0x0
 ; CHECK-NEXT: pointer_to_array:
 ; CHECK-NEXT: .int32      array+4
 ; CHECK-NEXT: .size       pointer_to_array, 4

diff  --git a/llvm/test/DebugInfo/COFF/globals.ll b/llvm/test/DebugInfo/COFF/globals.ll
index 6d4b2f5327397..65771d04e15e9 100644
--- a/llvm/test/DebugInfo/COFF/globals.ll
+++ b/llvm/test/DebugInfo/COFF/globals.ll
@@ -48,7 +48,7 @@
 ; $ clang-cl a.cpp /c /GS- /Z7 /GR- /std:c++17 /clang:-S /clang:-emit-llvm
 
 ; ASM:        .section        .debug$S,"dr"
-; ASM-NEXT:   .p2align        2
+; ASM-NEXT:   .p2align        2, 0x0
 ; ASM-NEXT:   .long   4                       # Debug section magic
 
 ; ASM:        .short  4365                    # Record kind: S_GDATA32
@@ -56,70 +56,70 @@
 ; ASM-NEXT:   .secrel32       "?first@@3HA"   # DataOffset
 ; ASM-NEXT:   .secidx "?first@@3HA"           # Segment
 ; ASM-NEXT:   .asciz  "first"                 # Name
-; ASM-NEXT:   .p2align        2
+; ASM-NEXT:   .p2align        2, 0x0
 
 ; ASM:        .short  4371                    # Record kind: S_GTHREAD32
 ; ASM-NEXT:   .long   4117                    # Type
 ; ASM-NEXT:   .secrel32       "?middle@@3PEBHEB" # DataOffset
 ; ASM-NEXT:   .secidx "?middle@@3PEBHEB"      # Segment
 ; ASM-NEXT:   .asciz  "middle"                # Name
-; ASM-NEXT:   .p2align        2
+; ASM-NEXT:   .p2align        2, 0x0
 
 ; ASM:        .short  4371                    # Record kind: S_GTHREAD32
 ; ASM-NEXT:   .long   116                     # Type
 ; ASM-NEXT:   .secrel32       "?globalTLS at foo@@3HA" # DataOffset
 ; ASM-NEXT:   .secidx "?globalTLS at foo@@3HA"   # Segment
 ; ASM-NEXT:   .asciz  "foo::globalTLS"        # Name
-; ASM-NEXT:   .p2align        2
+; ASM-NEXT:   .p2align        2, 0x0
 
 ; ASM:        .short  4365                    # Record kind: S_GDATA32
 ; ASM-NEXT:   .long   116                     # Type
 ; ASM-NEXT:   .secrel32       "?justGlobal at foo@@3HA" # DataOffset
 ; ASM-NEXT:   .secidx "?justGlobal at foo@@3HA"  # Segment
 ; ASM-NEXT:   .asciz  "foo::justGlobal"       # Name
-; ASM-NEXT:   .p2align        2
+; ASM-NEXT:   .p2align        2, 0x0
 
 ; ASM:        .short  4365                    # Record kind: S_GDATA32
 ; ASM-NEXT:   .long   116                     # Type
 ; ASM-NEXT:   .secrel32       "?last@@3HA"    # DataOffset
 ; ASM-NEXT:   .secidx "?last@@3HA"            # Segment
 ; ASM-NEXT:   .asciz  "last"                  # Name
-; ASM-NEXT:   .p2align        2
+; ASM-NEXT:   .p2align        2, 0x0
 
 ; ASM:        .short	4359                    # Record kind: S_CONSTANT
 ; ASM-NEXT:	  .long	4100                    # Type
 ; ASM-NEXT:   .byte	0x08, 0x00              # Value
 ; ASM-NEXT:	  .asciz	"foo::constExpr"        # Name
-; ASM-NEXT:   .p2align	2
+; ASM-NEXT:   .p2align	2, 0x0
 
 ; ASM:        .short	4359                    # Record kind: S_CONSTANT
 ; ASM-NEXT:   .long	4100                    # Type
 ; ASM-NEXT:   .byte	0x09, 0x00              # Value
 ; ASM-NEXT:   .asciz	"foo::constVal"         # Name
-; ASM-NEXT:   .p2align	2
+; ASM-NEXT:   .p2align	2, 0x0
 
 ; ASM:        .short	4359                    # Record kind: S_CONSTANT
 ; ASM-NEXT:   .long	4100                    # Type
 ; ASM-NEXT:   .byte	0x0e, 0x00              # Value
 ; ASM-NEXT:   .asciz	"foo::Data::DataConstExpr" # Name
-; ASM-NEXT:   .p2align	2
+; ASM-NEXT:   .p2align	2, 0x0
 
 ; ASM:        .short  4364                    # Record kind: S_LDATA32
 ; ASM-NEXT:   .long   116                     # Type
 ; ASM-NEXT:   .secrel32       "?globalStatic at foo@@3HA" # DataOffset
 ; ASM-NEXT:   .secidx "?globalStatic at foo@@3HA" # Segment
 ; ASM-NEXT:   .asciz  "foo::globalStatic"     # Name
-; ASM-NEXT:   .p2align        2
+; ASM-NEXT:   .p2align        2, 0x0
 
 ; ASM:        .short  4370                    # Record kind: S_LTHREAD32
 ; ASM-NEXT:   .long   116                     # Type
 ; ASM-NEXT:   .secrel32       "?staticTLS at foo@@3HA" # DataOffset
 ; ASM-NEXT:   .secidx "?staticTLS at foo@@3HA"   # Segment
 ; ASM-NEXT:   .asciz  "foo::staticTLS"        # Name
-; ASM-NEXT:   .p2align        2
+; ASM-NEXT:   .p2align        2, 0x0
 
 ; ASM:        .section        .debug$S,"dr",associative,"?comdat@?$A at X@@2HB"
-; ASM-NEXT:   .p2align        2
+; ASM-NEXT:   .p2align        2, 0x0
 ; ASM-NEXT:   .long   4                       # Debug section magic
 
 ; ASM:        .short  4365                    # Record kind: S_GDATA32
@@ -129,24 +129,24 @@
 ; ASM-NEXT:   .asciz  "A<void>::comdat"       # Name
 
 ; ASM:	      .section	.debug$S,"dr",associative,"?DataStaticTLS at Data@foo@@2HA"
-; ASM-NEXT:	  .p2align	2               # Symbol subsection for ?DataStaticTLS at Data@foo@@2HA
+; ASM-NEXT:	  .p2align	2, 0x0          # Symbol subsection for ?DataStaticTLS at Data@foo@@2HA
 
 ; ASM:	      .short	4371                    # Record kind: S_GTHREAD32
 ; ASM-NEXT:	  .long	116                     # Type
 ; ASM-NEXT:	  .secrel32	"?DataStaticTLS at Data@foo@@2HA" # DataOffset
 ; ASM-NEXT:	  .secidx	"?DataStaticTLS at Data@foo@@2HA" # Segment
 ; ASM-NEXT:	  .asciz	"foo::Data::DataStaticTLS"         # Name
-; ASM-NEXT:   .p2align	2
+; ASM-NEXT:   .p2align	2, 0x0
 
 ; ASM:        .section        .debug$S,"dr",associative,"?DataStatic at Data@foo@@2HA"
-; ASM-NEXT:   .p2align        2               # Symbol subsection for ?DataStatic at Data@foo@@2HA
+; ASM-NEXT:   .p2align        2, 0x0          # Symbol subsection for ?DataStatic at Data@foo@@2HA
 
 ; ASM:        .short  4365                    # Record kind: S_GDATA32
 ; ASM-NEXT:   .long   116                     # Type
 ; ASM-NEXT:   .secrel32       "?DataStatic at Data@foo@@2HA" # DataOffset
 ; ASM-NEXT:   .secidx "?DataStatic at Data@foo@@2HA" # Segment
 ; ASM-NEXT:   .asciz  "foo::Data::DataStatic" # Name
-; ASM-NEXT:   .p2align        2
+; ASM-NEXT:   .p2align        2, 0x0
 
 ; OBJ: CodeViewDebugInfo [
 ; OBJ:   Section: .debug$S


        


More information about the llvm-commits mailing list