@@ -100,5 +100,42 @@ define void @varargs_many_argscalleer() nounwind {
100
100
ret void
101
101
}
102
102
103
+ define void @varargs_caller_tail () nounwind {
104
+ ; CHECK-LABEL: varargs_caller_tail:
105
+ ; CHECK: // %bb.0:
106
+ ; CHECK-NEXT: sub sp, sp, #48
107
+ ; CHECK-NEXT: mov x4, sp
108
+ ; CHECK-NEXT: add x8, sp, #16
109
+ ; CHECK-NEXT: mov x9, #4617315517961601024 // =0x4014000000000000
110
+ ; CHECK-NEXT: mov x0, #4607182418800017408 // =0x3ff0000000000000
111
+ ; CHECK-NEXT: mov w1, #2 // =0x2
112
+ ; CHECK-NEXT: mov x2, #4613937818241073152 // =0x4008000000000000
113
+ ; CHECK-NEXT: mov w3, #4 // =0x4
114
+ ; CHECK-NEXT: mov w5, #16 // =0x10
115
+ ; CHECK-NEXT: stp xzr, x30, [sp, #24] // 8-byte Folded Spill
116
+ ; CHECK-NEXT: stp x9, x8, [sp]
117
+ ; CHECK-NEXT: str xzr, [sp, #16]
118
+ ; CHECK-NEXT: .weak_anti_dep varargs_callee
119
+ ; CHECK-NEXT:.set varargs_callee, "#varargs_callee"@WEAKREF
120
+ ; CHECK-NEXT: .weak_anti_dep "#varargs_callee"
121
+ ; CHECK-NEXT:.set "#varargs_callee", varargs_callee@WEAKREF
122
+ ; CHECK-NEXT: bl "#varargs_callee"
123
+ ; CHECK-NEXT: ldr x30, [sp, #32] // 8-byte Folded Reload
124
+ ; CHECK-NEXT: add x4, sp, #48
125
+ ; CHECK-NEXT: mov x0, #4607182418800017408 // =0x3ff0000000000000
126
+ ; CHECK-NEXT: mov w1, #4 // =0x4
127
+ ; CHECK-NEXT: mov w2, #3 // =0x3
128
+ ; CHECK-NEXT: mov w3, #2 // =0x2
129
+ ; CHECK-NEXT: mov x5, xzr
130
+ ; CHECK-NEXT: add sp, sp, #48
131
+ ; CHECK-NEXT: .weak_anti_dep varargs_callee
132
+ ; CHECK-NEXT:.set varargs_callee, "#varargs_callee"@WEAKREF
133
+ ; CHECK-NEXT: .weak_anti_dep "#varargs_callee"
134
+ ; CHECK-NEXT:.set "#varargs_callee", varargs_callee@WEAKREF
135
+ ; CHECK-NEXT: b "#varargs_callee"
136
+ call void (double , ...) @varargs_callee (double 1 .0 , i32 2 , double 3 .0 , i32 4 , double 5 .0 , <2 x double > <double 0 .0 , double 0 .0 >)
137
+ tail call void (double , ...) @varargs_callee (double 1 .0 , i32 4 , i32 3 , i32 2 )
138
+ ret void
139
+ }
103
140
104
141
declare void @llvm.va_start (ptr )
0 commit comments