xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/tailcall-stackalign.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s  -mtriple=i686-unknown-linux  -tailcallopt -no-x86-call-frame-opt | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; Linux has 8 byte alignment so the params cause stack size 20 when tailcallopt
3*9880d681SAndroid Build Coastguard Worker; is enabled, ensure that a normal fastcc call has matching stack size
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workerdefine fastcc i32 @tailcallee(i32 %a1, i32 %a2, i32 %a3, i32 %a4) {
7*9880d681SAndroid Build Coastguard Worker       ret i32 %a3
8*9880d681SAndroid Build Coastguard Worker}
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Workerdefine fastcc i32 @tailcaller(i32 %in1, i32 %in2, i32 %in3, i32 %in4) {
11*9880d681SAndroid Build Coastguard Worker       %tmp11 = tail call fastcc i32 @tailcallee(i32 %in1, i32 %in2,
12*9880d681SAndroid Build Coastguard Worker                                                 i32 %in1, i32 %in2)
13*9880d681SAndroid Build Coastguard Worker       ret i32 %tmp11
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerdefine i32 @main(i32 %argc, i8** %argv) {
17*9880d681SAndroid Build Coastguard Worker %tmp1 = call fastcc i32 @tailcaller( i32 1, i32 2, i32 3, i32 4 )
18*9880d681SAndroid Build Coastguard Worker ; expect match subl [stacksize] here
19*9880d681SAndroid Build Coastguard Worker ret i32 0
20*9880d681SAndroid Build Coastguard Worker}
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker; CHECK: calll tailcaller
23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: subl $12
24