Skip to content

Commit f09e589

Browse files
authored
properly align long double on i386 darwin (#148102)
Fixes llvm/llvm-project#148034 e49fcfc broke long double stack alignment on i386 Darwin, this PR fixes the issue.
1 parent 22d584e commit f09e589

File tree

5 files changed

+5
-82
lines changed

5 files changed

+5
-82
lines changed

llvm/lib/Target/X86/X86CallingConv.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,7 @@ def CC_X86_32_Common : CallingConv<[
832832
CCIfType<[f64], CCAssignToStack<8, 4>>,
833833

834834
// Long doubles get slots whose size and alignment depends on the subtarget.
835+
CCIfSubtarget<"isTargetDarwin()", CCIfType<[f80], CCAssignToStack<0, 4>>>,
835836
CCIfType<[f80], CCAssignToStack<0, 0>>,
836837

837838
// Boolean vectors of AVX-512 are passed in SIMD registers.

llvm/test/CodeGen/X86/2007-09-27-LDIntrinsics.ll

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ entry:
88
ret x86_fp80 %tmp2
99

1010
; CHECK-LABEL: foo:
11-
; CHECK: fldt 16(%esp)
11+
; CHECK: fldt 4(%esp)
1212
; CHECK-NEXT: fsqrt
13-
; CHECK-NEXT: addl $12, %esp
1413
; CHECK-NEXT: ret
1514
}
1615

@@ -21,11 +20,10 @@ entry:
2120
%tmp2 = call x86_fp80 @llvm.powi.f80.i32( x86_fp80 %x, i32 3 )
2221
ret x86_fp80 %tmp2
2322
; CHECK-LABEL: bar:
24-
; CHECK: fldt 16(%esp)
23+
; CHECK: fldt 4(%esp)
2524
; CHECK-NEXT: fld %st(0)
2625
; CHECK-NEXT: fmul %st(1)
2726
; CHECK-NEXT: fmulp
28-
; CHECK-NEXT: addl $12, %esp
2927
; CHECK-NEXT: ret
3028
}
3129

llvm/test/CodeGen/X86/inline-asm-fpstack.ll

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,10 @@ define double @test2() nounwind {
2929
define void @test3(x86_fp80 %X) nounwind {
3030
; CHECK-LABEL: test3:
3131
; CHECK: ## %bb.0:
32-
; CHECK-NEXT: subl $12, %esp
3332
; CHECK-NEXT: fldt {{[0-9]+}}(%esp)
3433
; CHECK-NEXT: ## InlineAsm Start
3534
; CHECK-NEXT: frob
3635
; CHECK-NEXT: ## InlineAsm End
37-
; CHECK-NEXT: addl $12, %esp
3836
; CHECK-NEXT: retl
3937
call void asm sideeffect "frob ", "{st(0)},~{st},~{dirflag},~{fpsr},~{flags}"( x86_fp80 %X)
4038
ret void
@@ -248,14 +246,12 @@ entry:
248246
define void @fist1(x86_fp80 %x, ptr %p) nounwind ssp {
249247
; CHECK-LABEL: fist1:
250248
; CHECK: ## %bb.0: ## %entry
251-
; CHECK-NEXT: subl $12, %esp
252249
; CHECK-NEXT: fldt {{[0-9]+}}(%esp)
253250
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
254251
; CHECK-NEXT: ## InlineAsm Start
255252
; CHECK-NEXT: fistl (%eax)
256253
; CHECK-NEXT: ## InlineAsm End
257254
; CHECK-NEXT: fstp %st(0)
258-
; CHECK-NEXT: addl $12, %esp
259255
; CHECK-NEXT: retl
260256
entry:
261257
tail call void asm sideeffect "fistl $1", "{st},*m,~{memory},~{dirflag},~{fpsr},~{flags}"(x86_fp80 %x, ptr elementtype(i32) %p) nounwind
@@ -273,13 +269,11 @@ entry:
273269
define x86_fp80 @fist2(x86_fp80 %x, ptr %p) nounwind ssp {
274270
; CHECK-LABEL: fist2:
275271
; CHECK: ## %bb.0: ## %entry
276-
; CHECK-NEXT: subl $12, %esp
277272
; CHECK-NEXT: fldt {{[0-9]+}}(%esp)
278273
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
279274
; CHECK-NEXT: ## InlineAsm Start
280275
; CHECK-NEXT: fistl (%eax)
281276
; CHECK-NEXT: ## InlineAsm End
282-
; CHECK-NEXT: addl $12, %esp
283277
; CHECK-NEXT: retl
284278
entry:
285279
%0 = tail call x86_fp80 asm "fistl $2", "=&{st},0,*m,~{memory},~{dirflag},~{fpsr},~{flags}"(x86_fp80 %x, ptr elementtype(i32) %p) nounwind
@@ -294,15 +288,13 @@ entry:
294288
define void @fucomp1(x86_fp80 %x, x86_fp80 %y) nounwind ssp {
295289
; CHECK-LABEL: fucomp1:
296290
; CHECK: ## %bb.0: ## %entry
297-
; CHECK-NEXT: subl $12, %esp
298291
; CHECK-NEXT: fldt {{[0-9]+}}(%esp)
299292
; CHECK-NEXT: fldt {{[0-9]+}}(%esp)
300293
; CHECK-NEXT: fxch %st(1)
301294
; CHECK-NEXT: ## InlineAsm Start
302295
; CHECK-NEXT: fucomp %st(1)
303296
; CHECK-NEXT: ## InlineAsm End
304297
; CHECK-NEXT: fstp %st(0)
305-
; CHECK-NEXT: addl $12, %esp
306298
; CHECK-NEXT: retl
307299
entry:
308300
tail call void asm sideeffect "fucomp $1", "{st},f,~{st},~{dirflag},~{fpsr},~{flags}"(x86_fp80 %x, x86_fp80 %y) nounwind
@@ -322,15 +314,13 @@ entry:
322314
define void @fucomp2(x86_fp80 %x, x86_fp80 %y) nounwind ssp {
323315
; CHECK-LABEL: fucomp2:
324316
; CHECK: ## %bb.0: ## %entry
325-
; CHECK-NEXT: subl $12, %esp
326317
; CHECK-NEXT: fldt {{[0-9]+}}(%esp)
327318
; CHECK-NEXT: fldt {{[0-9]+}}(%esp)
328319
; CHECK-NEXT: fxch %st(1)
329320
; CHECK-NEXT: ## InlineAsm Start
330321
; CHECK-NEXT: fucomp %st(1)
331322
; CHECK-NEXT: ## InlineAsm End
332323
; CHECK-NEXT: fstp %st(0)
333-
; CHECK-NEXT: addl $12, %esp
334324
; CHECK-NEXT: retl
335325
entry:
336326
tail call void asm sideeffect "fucomp $1", "{st},{st(1)},~{st},~{dirflag},~{fpsr},~{flags}"(x86_fp80 %x, x86_fp80 %y) nounwind
@@ -340,14 +330,12 @@ entry:
340330
define void @fucomp3(x86_fp80 %x, x86_fp80 %y) nounwind ssp {
341331
; CHECK-LABEL: fucomp3:
342332
; CHECK: ## %bb.0: ## %entry
343-
; CHECK-NEXT: subl $12, %esp
344333
; CHECK-NEXT: fldt {{[0-9]+}}(%esp)
345334
; CHECK-NEXT: fldt {{[0-9]+}}(%esp)
346335
; CHECK-NEXT: fxch %st(1)
347336
; CHECK-NEXT: ## InlineAsm Start
348337
; CHECK-NEXT: fucompp %st(1)
349338
; CHECK-NEXT: ## InlineAsm End
350-
; CHECK-NEXT: addl $12, %esp
351339
; CHECK-NEXT: retl
352340
entry:
353341
tail call void asm sideeffect "fucompp $1", "{st},{st(1)},~{st},~{st(1)},~{dirflag},~{fpsr},~{flags}"(x86_fp80 %x, x86_fp80 %y) nounwind

0 commit comments

Comments
 (0)