Skip to content

Commit 4f2c3de

Browse files
committed
[X86] Don't request 0x90 nop filling in p2align directives
As of rev ea222be, LLVMs assembler will actually try to honour the "fill value" part of p2align directives. X86 always prints these as 0x90, however, I don't believe that's what it actually wants. If you compile an LLVM-IR file with -filetype=obj, you'll get multi-byte nops for .text padding. If you go via a textual assembly file, you'll now get single-byte-nop padding. This divergent behaviour is undesirable IMO. To fix: don't set the byte padding field for x86, and test that we get the same multi-byte padding when compiled via textual assembly. Added same-align-bytes-with-llasm-llobj.ll to that effect.
1 parent 056a3f4 commit 4f2c3de

File tree

216 files changed

+1425
-1376
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

216 files changed

+1425
-1376
lines changed

llvm/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ X86MCAsmInfoDarwin::X86MCAsmInfoDarwin(const Triple &T) {
4343

4444
AssemblerDialect = AsmWriterFlavor;
4545

46-
TextAlignFillValue = 0x90;
46+
// This will be padded with appropriately sized nops.
47+
TextAlignFillValue = 0;
4748

4849
if (!is64Bit)
4950
Data64bitsDirective = nullptr; // we can't emit a 64-bit unit
@@ -93,7 +94,8 @@ X86ELFMCAsmInfo::X86ELFMCAsmInfo(const Triple &T) {
9394

9495
AssemblerDialect = AsmWriterFlavor;
9596

96-
TextAlignFillValue = 0x90;
97+
// This will be padded with appropriately sized nops.
98+
TextAlignFillValue = 0;
9799

98100
// Debug Information
99101
SupportsDebugInformation = true;
@@ -132,7 +134,8 @@ X86MCAsmInfoMicrosoft::X86MCAsmInfoMicrosoft(const Triple &Triple) {
132134

133135
AssemblerDialect = AsmWriterFlavor;
134136

135-
TextAlignFillValue = 0x90;
137+
// This will be padded with appropriately sized nops.
138+
TextAlignFillValue = 0;
136139

137140
AllowAtInName = true;
138141
}
@@ -167,7 +170,8 @@ X86MCAsmInfoGNUCOFF::X86MCAsmInfoGNUCOFF(const Triple &Triple) {
167170

168171
AssemblerDialect = AsmWriterFlavor;
169172

170-
TextAlignFillValue = 0x90;
173+
// This will be padded with appropriately sized nops.
174+
TextAlignFillValue = 0;
171175

172176
AllowAtInName = true;
173177
}

llvm/test/CodeGen/X86/2006-08-21-ExtraMovInst.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ define i32 @foo(i32 %t, i32 %C) {
77
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx
88
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
99
; CHECK-NEXT: decl %eax
10-
; CHECK-NEXT: .p2align 4, 0x90
10+
; CHECK-NEXT: .p2align 4
1111
; CHECK-NEXT: .LBB0_1: # %cond_true
1212
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
1313
; CHECK-NEXT: incl %eax

llvm/test/CodeGen/X86/2007-01-13-StackPtrIndex.ll

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
2727
; CHECK-NEXT: js .LBB0_14
2828
; CHECK-NEXT: # %bb.12:
2929
; CHECK-NEXT: xorl %r8d, %r8d
30-
; CHECK-NEXT: .p2align 4, 0x90
30+
; CHECK-NEXT: .p2align 4
3131
; CHECK-NEXT: .LBB0_13: # %a25b
3232
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
3333
; CHECK-NEXT: testb %r8b, %r8b
@@ -38,7 +38,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
3838
; CHECK-NEXT: jne .LBB0_1
3939
; CHECK-NEXT: # %bb.15:
4040
; CHECK-NEXT: xorl %r8d, %r8d
41-
; CHECK-NEXT: .p2align 4, 0x90
41+
; CHECK-NEXT: .p2align 4
4242
; CHECK-NEXT: .LBB0_16: # %a25b140
4343
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
4444
; CHECK-NEXT: testb %r8b, %r8b
@@ -56,7 +56,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
5656
; CHECK-NEXT: xorps %xmm0, %xmm0
5757
; CHECK-NEXT: movb $1, %r10b
5858
; CHECK-NEXT: jmp .LBB0_3
59-
; CHECK-NEXT: .p2align 4, 0x90
59+
; CHECK-NEXT: .p2align 4
6060
; CHECK-NEXT: .LBB0_9: # %b1606
6161
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
6262
; CHECK-NEXT: testb %r9b, %r9b
@@ -83,7 +83,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
8383
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
8484
; CHECK-NEXT: testq %rdx, %rdx
8585
; CHECK-NEXT: js .LBB0_18
86-
; CHECK-NEXT: .p2align 4, 0x90
86+
; CHECK-NEXT: .p2align 4
8787
; CHECK-NEXT: .LBB0_36: # %a30b
8888
; CHECK-NEXT: # Parent Loop BB0_3 Depth=1
8989
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
@@ -93,7 +93,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
9393
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
9494
; CHECK-NEXT: testb %r10b, %r10b
9595
; CHECK-NEXT: jne .LBB0_4
96-
; CHECK-NEXT: .p2align 4, 0x90
96+
; CHECK-NEXT: .p2align 4
9797
; CHECK-NEXT: .LBB0_19: # %a30b294
9898
; CHECK-NEXT: # Parent Loop BB0_3 Depth=1
9999
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
@@ -115,7 +115,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
115115
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
116116
; CHECK-NEXT: testb %r8b, %r8b
117117
; CHECK-NEXT: jne .LBB0_8
118-
; CHECK-NEXT: .p2align 4, 0x90
118+
; CHECK-NEXT: .p2align 4
119119
; CHECK-NEXT: .LBB0_33: # %a74b
120120
; CHECK-NEXT: # Parent Loop BB0_3 Depth=1
121121
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
@@ -128,7 +128,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
128128
; CHECK-NEXT: # in Loop: Header=BB0_3 Depth=1
129129
; CHECK-NEXT: testl %eax, %eax
130130
; CHECK-NEXT: js .LBB0_9
131-
; CHECK-NEXT: .p2align 4, 0x90
131+
; CHECK-NEXT: .p2align 4
132132
; CHECK-NEXT: .LBB0_35: # %a97b
133133
; CHECK-NEXT: # Parent Loop BB0_3 Depth=1
134134
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
@@ -142,7 +142,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
142142
; CHECK-NEXT: testb %r9b, %r9b
143143
; CHECK-NEXT: jne .LBB0_35
144144
; CHECK-NEXT: jmp .LBB0_9
145-
; CHECK-NEXT: .p2align 4, 0x90
145+
; CHECK-NEXT: .p2align 4
146146
; CHECK-NEXT: .LBB0_21: # %b377
147147
; CHECK-NEXT: # in Loop: Header=BB0_20 Depth=2
148148
; CHECK-NEXT: testb %r9b, %r9b
@@ -153,15 +153,15 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
153153
; CHECK-NEXT: # Child Loop BB0_37 Depth 3
154154
; CHECK-NEXT: testq %rsi, %rsi
155155
; CHECK-NEXT: js .LBB0_21
156-
; CHECK-NEXT: .p2align 4, 0x90
156+
; CHECK-NEXT: .p2align 4
157157
; CHECK-NEXT: .LBB0_37: # %a35b
158158
; CHECK-NEXT: # Parent Loop BB0_3 Depth=1
159159
; CHECK-NEXT: # Parent Loop BB0_20 Depth=2
160160
; CHECK-NEXT: # => This Inner Loop Header: Depth=3
161161
; CHECK-NEXT: testb %r9b, %r9b
162162
; CHECK-NEXT: je .LBB0_37
163163
; CHECK-NEXT: jmp .LBB0_21
164-
; CHECK-NEXT: .p2align 4, 0x90
164+
; CHECK-NEXT: .p2align 4
165165
; CHECK-NEXT: .LBB0_27: # %b1016
166166
; CHECK-NEXT: # in Loop: Header=BB0_25 Depth=2
167167
; CHECK-NEXT: testq %rsi, %rsi
@@ -173,7 +173,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
173173
; CHECK-NEXT: # Child Loop BB0_28 Depth 3
174174
; CHECK-NEXT: testq %rdx, %rdx
175175
; CHECK-NEXT: js .LBB0_26
176-
; CHECK-NEXT: .p2align 4, 0x90
176+
; CHECK-NEXT: .p2align 4
177177
; CHECK-NEXT: .LBB0_38: # %a53b
178178
; CHECK-NEXT: # Parent Loop BB0_3 Depth=1
179179
; CHECK-NEXT: # Parent Loop BB0_25 Depth=2
@@ -184,15 +184,15 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
184184
; CHECK-NEXT: # in Loop: Header=BB0_25 Depth=2
185185
; CHECK-NEXT: testb %r10b, %r10b
186186
; CHECK-NEXT: jne .LBB0_27
187-
; CHECK-NEXT: .p2align 4, 0x90
187+
; CHECK-NEXT: .p2align 4
188188
; CHECK-NEXT: .LBB0_28: # %a53b1019
189189
; CHECK-NEXT: # Parent Loop BB0_3 Depth=1
190190
; CHECK-NEXT: # Parent Loop BB0_25 Depth=2
191191
; CHECK-NEXT: # => This Inner Loop Header: Depth=3
192192
; CHECK-NEXT: testq %rdx, %rdx
193193
; CHECK-NEXT: jle .LBB0_28
194194
; CHECK-NEXT: jmp .LBB0_27
195-
; CHECK-NEXT: .p2align 4, 0x90
195+
; CHECK-NEXT: .p2align 4
196196
; CHECK-NEXT: .LBB0_31: # %b1263
197197
; CHECK-NEXT: # in Loop: Header=BB0_29 Depth=2
198198
; CHECK-NEXT: testq %rdx, %rdx
@@ -204,7 +204,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
204204
; CHECK-NEXT: # Child Loop BB0_32 Depth 3
205205
; CHECK-NEXT: testq %rsi, %rsi
206206
; CHECK-NEXT: js .LBB0_30
207-
; CHECK-NEXT: .p2align 4, 0x90
207+
; CHECK-NEXT: .p2align 4
208208
; CHECK-NEXT: .LBB0_39: # %a63b
209209
; CHECK-NEXT: # Parent Loop BB0_3 Depth=1
210210
; CHECK-NEXT: # Parent Loop BB0_29 Depth=2
@@ -215,15 +215,15 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
215215
; CHECK-NEXT: # in Loop: Header=BB0_29 Depth=2
216216
; CHECK-NEXT: testq %rsi, %rsi
217217
; CHECK-NEXT: jle .LBB0_31
218-
; CHECK-NEXT: .p2align 4, 0x90
218+
; CHECK-NEXT: .p2align 4
219219
; CHECK-NEXT: .LBB0_32: # %a63b1266
220220
; CHECK-NEXT: # Parent Loop BB0_3 Depth=1
221221
; CHECK-NEXT: # Parent Loop BB0_29 Depth=2
222222
; CHECK-NEXT: # => This Inner Loop Header: Depth=3
223223
; CHECK-NEXT: testq %rsi, %rsi
224224
; CHECK-NEXT: jle .LBB0_32
225225
; CHECK-NEXT: jmp .LBB0_31
226-
; CHECK-NEXT: .p2align 4, 0x90
226+
; CHECK-NEXT: .p2align 4
227227
; CHECK-NEXT: .LBB0_24: # %b712
228228
; CHECK-NEXT: # in Loop: Header=BB0_22 Depth=2
229229
; CHECK-NEXT: testb %r9b, %r9b
@@ -234,7 +234,7 @@ define dso_local void @foo(ptr %a0, ptr %a1, ptr %a2, ptr %a3, ptr %a4, ptr %a5)
234234
; CHECK-NEXT: # Child Loop BB0_23 Depth 3
235235
; CHECK-NEXT: testq %rdx, %rdx
236236
; CHECK-NEXT: js .LBB0_24
237-
; CHECK-NEXT: .p2align 4, 0x90
237+
; CHECK-NEXT: .p2align 4
238238
; CHECK-NEXT: .LBB0_23: # %a45b
239239
; CHECK-NEXT: # Parent Loop BB0_3 Depth=1
240240
; CHECK-NEXT: # Parent Loop BB0_22 Depth=2

llvm/test/CodeGen/X86/2007-03-15-GEP-Idx-Sink.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ define void @foo(ptr %buf, i32 %size, i32 %col, ptr %p) nounwind {
1515
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %edx
1616
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %esi
1717
; CHECK-NEXT: addl $8, %ecx
18-
; CHECK-NEXT: .p2align 4, 0x90
18+
; CHECK-NEXT: .p2align 4
1919
; CHECK-NEXT: LBB0_2: ## %bb
2020
; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1
2121
; CHECK-NEXT: movl (%esi), %edi

llvm/test/CodeGen/X86/2007-10-12-CoalesceExtSubReg.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ define signext i16 @f(ptr %bp, ptr %ss) {
99
; CHECK-NEXT: .cfi_offset %esi, -8
1010
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
1111
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx
12-
; CHECK-NEXT: .p2align 4, 0x90
12+
; CHECK-NEXT: .p2align 4
1313
; CHECK-NEXT: .LBB0_1: # %cond_next127
1414
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
1515
; CHECK-NEXT: movl (%eax), %edx

llvm/test/CodeGen/X86/2007-10-12-SpillerUnfold2.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ define signext i16 @t(ptr %qmatrix, ptr %dct, ptr %acBaseTable, ptr %acExtTabl
66
; CHECK: # %bb.0: # %entry
77
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
88
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx
9-
; CHECK-NEXT: .p2align 4, 0x90
9+
; CHECK-NEXT: .p2align 4
1010
; CHECK-NEXT: .LBB0_1: # %cond_next127
1111
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
1212
; CHECK-NEXT: movl %eax, %edx

llvm/test/CodeGen/X86/2007-11-06-InstrSched.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ define float @foo(ptr %x, ptr %y, i32 %c) nounwind {
1414
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %edx
1515
; CHECK-NEXT: xorps %xmm0, %xmm0
1616
; CHECK-NEXT: xorl %esi, %esi
17-
; CHECK-NEXT: .p2align 4, 0x90
17+
; CHECK-NEXT: .p2align 4
1818
; CHECK-NEXT: .LBB0_3: # %bb18
1919
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
2020
; CHECK-NEXT: xorps %xmm1, %xmm1

llvm/test/CodeGen/X86/2007-11-30-LoadFolding-Bug.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ define fastcc void @mp_sqrt(i32 %n, i32 %radix, ptr %in, ptr %out, ptr %tmp1, pt
1616
; CHECK-NEXT: movb $1, %cl
1717
; CHECK-NEXT: movl $1, %ebx
1818
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %esi
19-
; CHECK-NEXT: .p2align 4, 0x90
19+
; CHECK-NEXT: .p2align 4
2020
; CHECK-NEXT: .LBB0_1: # %bb.i5
2121
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
2222
; CHECK-NEXT: movl %ecx, %eax
@@ -37,7 +37,7 @@ define fastcc void @mp_sqrt(i32 %n, i32 %radix, ptr %in, ptr %out, ptr %tmp1, pt
3737
; CHECK-NEXT: xorl %eax, %eax
3838
; CHECK-NEXT: xorl %ecx, %ecx
3939
; CHECK-NEXT: xorpd %xmm1, %xmm1
40-
; CHECK-NEXT: .p2align 4, 0x90
40+
; CHECK-NEXT: .p2align 4
4141
; CHECK-NEXT: .LBB0_7: # %bb.i28.i
4242
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
4343
; CHECK-NEXT: cvttsd2si %xmm1, %edi
@@ -85,7 +85,7 @@ define fastcc void @mp_sqrt(i32 %n, i32 %radix, ptr %in, ptr %out, ptr %tmp1, pt
8585
; CHECK-NEXT: popl %ebx
8686
; CHECK-NEXT: popl %ebp
8787
; CHECK-NEXT: retl
88-
; CHECK-NEXT: .p2align 4, 0x90
88+
; CHECK-NEXT: .p2align 4
8989
; CHECK-NEXT: .LBB0_9: # %bb.i.i
9090
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
9191
; CHECK-NEXT: jmp .LBB0_9

llvm/test/CodeGen/X86/2008-04-28-CoalescerBug.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ define void @t(ptr %depth, ptr %bop, i32 %mode) nounwind {
1616
; CHECK-NEXT: ## %bb.1: ## %entry
1717
; CHECK-NEXT: cmpl $1, %edx
1818
; CHECK-NEXT: jne LBB0_10
19-
; CHECK-NEXT: .p2align 4, 0x90
19+
; CHECK-NEXT: .p2align 4
2020
; CHECK-NEXT: LBB0_2: ## %bb2898.us
2121
; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1
2222
; CHECK-NEXT: jmp LBB0_2
2323
; CHECK-NEXT: LBB0_3: ## %bb13086.preheader
2424
; CHECK-NEXT: movb $1, %al
25-
; CHECK-NEXT: .p2align 4, 0x90
25+
; CHECK-NEXT: .p2align 4
2626
; CHECK-NEXT: LBB0_4: ## %bb13088
2727
; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1
2828
; CHECK-NEXT: testb %al, %al
@@ -31,7 +31,7 @@ define void @t(ptr %depth, ptr %bop, i32 %mode) nounwind {
3131
; CHECK-NEXT: ## in Loop: Header=BB0_4 Depth=1
3232
; CHECK-NEXT: xorl %ecx, %ecx
3333
; CHECK-NEXT: jmp LBB0_7
34-
; CHECK-NEXT: .p2align 4, 0x90
34+
; CHECK-NEXT: .p2align 4
3535
; CHECK-NEXT: LBB0_5: ## in Loop: Header=BB0_4 Depth=1
3636
; CHECK-NEXT: movl $65535, %ecx ## imm = 0xFFFF
3737
; CHECK-NEXT: LBB0_7: ## %bb13107

llvm/test/CodeGen/X86/2008-08-06-CmpStride.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ define i32 @main() nounwind {
1010
; CHECK: # %bb.0: # %entry
1111
; CHECK-NEXT: pushq %rbx
1212
; CHECK-NEXT: movl $10271, %ebx # imm = 0x281F
13-
; CHECK-NEXT: .p2align 4, 0x90
13+
; CHECK-NEXT: .p2align 4
1414
; CHECK-NEXT: .LBB0_1: # %forbody
1515
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
1616
; CHECK-NEXT: movl $.str, %edi

0 commit comments

Comments
 (0)