blob: 300db34b97580d132f99ce19371b4d5bb3f5e3b5 [file] [log] [blame]
Andrew Trick391dbad2013-11-26 02:03:25 +00001; RUN: llc < %s -mtriple=x86_64-apple-darwin -disable-fp-elim | FileCheck %s
Juergen Ributzka9969d3e2013-11-08 23:28:16 +00002
3; Stackmap Header: no constants - 6 callsites
4; CHECK-LABEL: .section __LLVM_STACKMAPS,__llvm_stackmaps
5; CHECK-NEXT: __LLVM_StackMaps:
6; Header
7; CHECK-NEXT: .long 0
8; Num Constants
9; CHECK-NEXT: .long 0
10; Num Callsites
Andrew Trick0ab5ba82013-11-19 03:29:59 +000011; CHECK-NEXT: .long 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000012
13; test
14; CHECK-NEXT: .long 0
Andrew Tricka28099f2013-11-11 22:40:25 +000015; CHECK-LABEL: .long L{{.*}}-_test
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000016; CHECK-NEXT: .short 0
17; 3 locations
18; CHECK-NEXT: .short 3
19; Loc 0: Register
20; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +000021; CHECK-NEXT: .byte 4
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000022; CHECK-NEXT: .short {{[0-9]+}}
23; CHECK-NEXT: .long 0
24; Loc 1: Register
25; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +000026; CHECK-NEXT: .byte 4
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000027; CHECK-NEXT: .short {{[0-9]+}}
28; CHECK-NEXT: .long 0
29; Loc 2: Constant 3
30; CHECK-NEXT: .byte 4
Andrew Trick10d5be42013-11-17 01:36:23 +000031; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000032; CHECK-NEXT: .short 0
33; CHECK-NEXT: .long 3
34define i64 @test() nounwind ssp uwtable {
35entry:
Juergen Ributzka87ed9062013-11-09 01:51:33 +000036 call anyregcc void (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i32 0, i32 15, i8* null, i32 2, i32 1, i32 2, i64 3)
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000037 ret i64 0
38}
39
40; property access 1 - %obj is an anyreg call argument and should therefore be in a register
41; CHECK-NEXT: .long 1
Andrew Tricka28099f2013-11-11 22:40:25 +000042; CHECK-LABEL: .long L{{.*}}-_property_access1
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000043; CHECK-NEXT: .short 0
44; 2 locations
45; CHECK-NEXT: .short 2
46; Loc 0: Register <-- this is the return register
47; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +000048; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000049; CHECK-NEXT: .short {{[0-9]+}}
50; CHECK-NEXT: .long 0
51; Loc 1: Register
52; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +000053; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000054; CHECK-NEXT: .short {{[0-9]+}}
55; CHECK-NEXT: .long 0
56define i64 @property_access1(i8* %obj) nounwind ssp uwtable {
57entry:
58 %f = inttoptr i64 12297829382473034410 to i8*
Juergen Ributzka87ed9062013-11-09 01:51:33 +000059 %ret = call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 1, i32 15, i8* %f, i32 1, i8* %obj)
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000060 ret i64 %ret
61}
62
63; property access 2 - %obj is an anyreg call argument and should therefore be in a register
64; CHECK-NEXT: .long 2
Andrew Tricka28099f2013-11-11 22:40:25 +000065; CHECK-LABEL: .long L{{.*}}-_property_access2
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000066; CHECK-NEXT: .short 0
67; 2 locations
68; CHECK-NEXT: .short 2
69; Loc 0: Register <-- this is the return register
70; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +000071; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000072; CHECK-NEXT: .short {{[0-9]+}}
73; CHECK-NEXT: .long 0
74; Loc 1: Register
75; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +000076; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000077; CHECK-NEXT: .short {{[0-9]+}}
78; CHECK-NEXT: .long 0
79define i64 @property_access2() nounwind ssp uwtable {
80entry:
81 %obj = alloca i64, align 8
82 %f = inttoptr i64 12297829382473034410 to i8*
Juergen Ributzka87ed9062013-11-09 01:51:33 +000083 %ret = call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 2, i32 15, i8* %f, i32 1, i64* %obj)
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000084 ret i64 %ret
85}
86
87; property access 3 - %obj is a frame index
88; CHECK-NEXT: .long 3
Andrew Tricka28099f2013-11-11 22:40:25 +000089; CHECK-LABEL: .long L{{.*}}-_property_access3
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000090; CHECK-NEXT: .short 0
91; 2 locations
92; CHECK-NEXT: .short 2
93; Loc 0: Register <-- this is the return register
94; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +000095; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +000096; CHECK-NEXT: .short {{[0-9]+}}
97; CHECK-NEXT: .long 0
Andrew Trick391dbad2013-11-26 02:03:25 +000098; Loc 1: Direct RBP - ofs
99; CHECK-NEXT: .byte 2
Andrew Trick10d5be42013-11-17 01:36:23 +0000100; CHECK-NEXT: .byte 8
Andrew Trick391dbad2013-11-26 02:03:25 +0000101; CHECK-NEXT: .short 6
102; CHECK-NEXT: .long
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000103define i64 @property_access3() nounwind ssp uwtable {
104entry:
105 %obj = alloca i64, align 8
106 %f = inttoptr i64 12297829382473034410 to i8*
Juergen Ributzka87ed9062013-11-09 01:51:33 +0000107 %ret = call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 3, i32 15, i8* %f, i32 0, i64* %obj)
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000108 ret i64 %ret
109}
110
111; anyreg_test1
112; CHECK-NEXT: .long 4
Andrew Tricka28099f2013-11-11 22:40:25 +0000113; CHECK-LABEL: .long L{{.*}}-_anyreg_test1
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000114; CHECK-NEXT: .short 0
Juergen Ributzka87ed9062013-11-09 01:51:33 +0000115; 14 locations
116; CHECK-NEXT: .short 14
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000117; Loc 0: Register <-- this is the return register
118; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000119; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000120; CHECK-NEXT: .short {{[0-9]+}}
121; CHECK-NEXT: .long 0
122; Loc 1: Register
123; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000124; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000125; CHECK-NEXT: .short {{[0-9]+}}
126; CHECK-NEXT: .long 0
127; Loc 2: Register
128; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000129; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000130; CHECK-NEXT: .short {{[0-9]+}}
131; CHECK-NEXT: .long 0
132; Loc 3: Register
133; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000134; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000135; CHECK-NEXT: .short {{[0-9]+}}
136; CHECK-NEXT: .long 0
137; Loc 4: Register
138; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000139; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000140; CHECK-NEXT: .short {{[0-9]+}}
141; CHECK-NEXT: .long 0
142; Loc 5: Register
143; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000144; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000145; CHECK-NEXT: .short {{[0-9]+}}
146; CHECK-NEXT: .long 0
147; Loc 6: Register
148; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000149; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000150; CHECK-NEXT: .short {{[0-9]+}}
151; CHECK-NEXT: .long 0
152; Loc 7: Register
153; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000154; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000155; CHECK-NEXT: .short {{[0-9]+}}
156; CHECK-NEXT: .long 0
157; Loc 8: Register
158; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000159; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000160; CHECK-NEXT: .short {{[0-9]+}}
161; CHECK-NEXT: .long 0
162; Loc 9: Register
163; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000164; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000165; CHECK-NEXT: .short {{[0-9]+}}
166; CHECK-NEXT: .long 0
167; Loc 10: Register
168; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000169; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000170; CHECK-NEXT: .short {{[0-9]+}}
171; CHECK-NEXT: .long 0
172; Loc 11: Register
173; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000174; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000175; CHECK-NEXT: .short {{[0-9]+}}
176; CHECK-NEXT: .long 0
177; Loc 12: Register
178; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000179; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000180; CHECK-NEXT: .short {{[0-9]+}}
181; CHECK-NEXT: .long 0
182; Loc 13: Register
183; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000184; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000185; CHECK-NEXT: .short {{[0-9]+}}
186; CHECK-NEXT: .long 0
Juergen Ributzka87ed9062013-11-09 01:51:33 +0000187define i64 @anyreg_test1(i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13) nounwind ssp uwtable {
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000188entry:
189 %f = inttoptr i64 12297829382473034410 to i8*
Juergen Ributzka87ed9062013-11-09 01:51:33 +0000190 %ret = call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 4, i32 15, i8* %f, i32 13, i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13)
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000191 ret i64 %ret
192}
193
194; anyreg_test2
195; CHECK-NEXT: .long 5
Andrew Tricka28099f2013-11-11 22:40:25 +0000196; CHECK-LABEL: .long L{{.*}}-_anyreg_test2
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000197; CHECK-NEXT: .short 0
Juergen Ributzka87ed9062013-11-09 01:51:33 +0000198; 14 locations
199; CHECK-NEXT: .short 14
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000200; Loc 0: Register <-- this is the return register
201; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000202; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000203; CHECK-NEXT: .short {{[0-9]+}}
204; CHECK-NEXT: .long 0
205; Loc 1: Register
206; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000207; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000208; CHECK-NEXT: .short {{[0-9]+}}
209; CHECK-NEXT: .long 0
210; Loc 2: Register
211; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000212; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000213; CHECK-NEXT: .short {{[0-9]+}}
214; CHECK-NEXT: .long 0
215; Loc 3: Register
216; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000217; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000218; CHECK-NEXT: .short {{[0-9]+}}
219; CHECK-NEXT: .long 0
220; Loc 4: Register
221; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000222; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000223; CHECK-NEXT: .short {{[0-9]+}}
224; CHECK-NEXT: .long 0
225; Loc 5: Register
226; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000227; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000228; CHECK-NEXT: .short {{[0-9]+}}
229; CHECK-NEXT: .long 0
230; Loc 6: Register
231; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000232; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000233; CHECK-NEXT: .short {{[0-9]+}}
234; CHECK-NEXT: .long 0
235; Loc 7: Register
236; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000237; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000238; CHECK-NEXT: .short {{[0-9]+}}
239; CHECK-NEXT: .long 0
240; Loc 8: Register
241; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000242; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000243; CHECK-NEXT: .short {{[0-9]+}}
244; CHECK-NEXT: .long 0
245; Loc 9: Register
246; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000247; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000248; CHECK-NEXT: .short {{[0-9]+}}
249; CHECK-NEXT: .long 0
250; Loc 10: Register
251; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000252; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000253; CHECK-NEXT: .short {{[0-9]+}}
254; CHECK-NEXT: .long 0
255; Loc 11: Register
256; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000257; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000258; CHECK-NEXT: .short {{[0-9]+}}
259; CHECK-NEXT: .long 0
260; Loc 12: Register
261; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000262; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000263; CHECK-NEXT: .short {{[0-9]+}}
264; CHECK-NEXT: .long 0
265; Loc 13: Register
266; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000267; CHECK-NEXT: .byte 8
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000268; CHECK-NEXT: .short {{[0-9]+}}
269; CHECK-NEXT: .long 0
Juergen Ributzka87ed9062013-11-09 01:51:33 +0000270define i64 @anyreg_test2(i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13) nounwind ssp uwtable {
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000271entry:
272 %f = inttoptr i64 12297829382473034410 to i8*
Juergen Ributzka87ed9062013-11-09 01:51:33 +0000273 %ret = call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 5, i32 15, i8* %f, i32 8, i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13)
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000274 ret i64 %ret
275}
276
Andrew Tricka28099f2013-11-11 22:40:25 +0000277; Test spilling the return value of an anyregcc call.
278;
279; <rdar://problem/15432754> [JS] Assertion: "Folded a def to a non-store!"
280;
281; CHECK-LABEL: .long 12
282; CHECK-LABEL: .long L{{.*}}-_patchpoint_spilldef
283; CHECK-NEXT: .short 0
284; CHECK-NEXT: .short 3
285; Loc 0: Register (some register that will be spilled to the stack)
286; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000287; CHECK-NEXT: .byte 8
Andrew Tricka28099f2013-11-11 22:40:25 +0000288; CHECK-NEXT: .short {{[0-9]+}}
289; CHECK-NEXT: .long 0
290; Loc 1: Register RDI
291; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000292; CHECK-NEXT: .byte 8
Andrew Tricka28099f2013-11-11 22:40:25 +0000293; CHECK-NEXT: .short 5
294; CHECK-NEXT: .long 0
295; Loc 1: Register RSI
296; CHECK-NEXT: .byte 1
Andrew Trick10d5be42013-11-17 01:36:23 +0000297; CHECK-NEXT: .byte 8
Andrew Tricka28099f2013-11-11 22:40:25 +0000298; CHECK-NEXT: .short 4
299; CHECK-NEXT: .long 0
300define i64 @patchpoint_spilldef(i64 %p1, i64 %p2, i64 %p3, i64 %p4) {
301entry:
302 %result = tail call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 12, i32 15, i8* inttoptr (i64 0 to i8*), i32 2, i64 %p1, i64 %p2)
303 tail call void asm sideeffect "nop", "~{ax},~{bx},~{cx},~{dx},~{bp},~{si},~{di},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"() nounwind
304 ret i64 %result
305}
306
Andrew Trick0ab5ba82013-11-19 03:29:59 +0000307; Test spilling the arguments of an anyregcc call.
308;
309; <rdar://problem/15487687> [JS] AnyRegCC argument ends up being spilled
310;
311; CHECK-LABEL: .long 13
312; CHECK-LABEL: .long L{{.*}}-_patchpoint_spillargs
313; CHECK-NEXT: .short 0
314; CHECK-NEXT: .short 5
315; Loc 0: Return a register
316; CHECK-NEXT: .byte 1
317; CHECK-NEXT: .byte 8
318; CHECK-NEXT: .short {{[0-9]+}}
319; CHECK-NEXT: .long 0
320; Loc 1: Arg0 in a Register
321; CHECK-NEXT: .byte 1
322; CHECK-NEXT: .byte 8
323; CHECK-NEXT: .short {{[0-9]+}}
324; CHECK-NEXT: .long 0
325; Loc 2: Arg1 in a Register
326; CHECK-NEXT: .byte 1
327; CHECK-NEXT: .byte 8
328; CHECK-NEXT: .short {{[0-9]+}}
329; CHECK-NEXT: .long 0
330; Loc 3: Arg2 spilled to RBP +
331; CHECK-NEXT: .byte 3
332; CHECK-NEXT: .byte 8
Andrew Trick391dbad2013-11-26 02:03:25 +0000333; CHECK-NEXT: .short 6
334; CHECK-NEXT: .long
Andrew Trick0ab5ba82013-11-19 03:29:59 +0000335; Loc 4: Arg3 spilled to RBP +
336; CHECK-NEXT: .byte 3
337; CHECK-NEXT: .byte 8
Andrew Trick391dbad2013-11-26 02:03:25 +0000338; CHECK-NEXT: .short 6
339; CHECK-NEXT: .long
Andrew Trick0ab5ba82013-11-19 03:29:59 +0000340define i64 @patchpoint_spillargs(i64 %p1, i64 %p2, i64 %p3, i64 %p4) {
341entry:
342 tail call void asm sideeffect "nop", "~{ax},~{bx},~{cx},~{dx},~{bp},~{si},~{di},~{r8},~{r9},~{r10},~{r11},~{r12},~{r13},~{r14},~{r15}"() nounwind
343 %result = tail call anyregcc i64 (i32, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i32 13, i32 15, i8* inttoptr (i64 0 to i8*), i32 2, i64 %p1, i64 %p2, i64 %p3, i64 %p4)
344 ret i64 %result
345}
346
Juergen Ributzka9969d3e2013-11-08 23:28:16 +0000347declare void @llvm.experimental.patchpoint.void(i32, i32, i8*, i32, ...)
348declare i64 @llvm.experimental.patchpoint.i64(i32, i32, i8*, i32, ...)