blob: bfa09eaae3cb831964254d0ef2ca8e6eceb954ec [file] [log] [blame]
Akira Hatanaka168d4e52013-11-27 23:38:42 +00001; RUN: llc -march=mipsel -disable-mips-delay-filler < %s | \
Akira Hatanaka42a91ef2013-12-07 02:48:29 +00002; RUN: FileCheck %s -check-prefix=O32
Akira Hatanaka168d4e52013-11-27 23:38:42 +00003; RUN: llc -march=mipsel -mips-load-target-from-got=false \
Akira Hatanaka42a91ef2013-12-07 02:48:29 +00004; RUN: -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=O32-LOADTGT
Akira Hatanaka168d4e52013-11-27 23:38:42 +00005
6@gd1 = common global double 0.000000e+00, align 8
7@gd2 = common global double 0.000000e+00, align 8
8
9; O32-LABEL: caller3:
10; O32-DAG: lw $25, %call16(callee3)
11; O32-DAG: move $gp
12; O32: jalr $25
Akira Hatanaka42a91ef2013-12-07 02:48:29 +000013; O32-NOT: move $gp
14; O32: lw $25, %call16(callee3)
Akira Hatanaka168d4e52013-11-27 23:38:42 +000015; O32-NOT: move $gp
16; O32: jalr $25
Akira Hatanaka42a91ef2013-12-07 02:48:29 +000017; O32-NOT: move $gp
18; O32: lw $25, %call16(callee3)
Akira Hatanaka168d4e52013-11-27 23:38:42 +000019; O32-NOT: move $gp
20; O32: jalr $25
21
22; O32-LOADTGT-LABEL: caller3:
23; O32-LOADTGT-DAG: lw $25, %call16(callee3)
24; O32-LOADTGT-DAG: move $gp
25; O32-LOADTGT: jalr $25
Akira Hatanaka42a91ef2013-12-07 02:48:29 +000026; O32-LOADTGT-NOT: move $gp
27; O32-LOADTGT: move $25
Akira Hatanaka168d4e52013-11-27 23:38:42 +000028; O32-LOADTGT-NOT: move $gp
29; O32-LOADTGT: jalr $25
Akira Hatanaka42a91ef2013-12-07 02:48:29 +000030; O32-LOADTGT-NOT: move $gp
31; O32-LOADTGT: move $25
Akira Hatanaka168d4e52013-11-27 23:38:42 +000032; O32-LOADTGT-NOT: move $gp
33; O32-LOADTGT: jalr $25
34
35define void @caller3(i32 %n) {
36entry:
37 tail call void @callee3()
38 tail call void @callee3()
39 %tobool1 = icmp eq i32 %n, 0
40 br i1 %tobool1, label %while.end, label %while.body
41
42while.body:
43 %n.addr.02 = phi i32 [ %dec, %while.body ], [ %n, %entry ]
44 %dec = add nsw i32 %n.addr.02, -1
45 tail call void @callee3()
46 %tobool = icmp eq i32 %dec, 0
47 br i1 %tobool, label %while.end, label %while.body
48
49while.end:
50 ret void
51}
52
53declare void @callee3()
54
55; O32-LABEL: caller4:
56; O32-DAG: lw $25, %call16(ceil)
57; O32-DAG: move $gp
58; O32: jalr $25
Akira Hatanaka42a91ef2013-12-07 02:48:29 +000059; O32-NOT: move $gp
60; O32: lw $25, %call16(ceil)
Akira Hatanaka168d4e52013-11-27 23:38:42 +000061; O32-NOT: move $gp
62; O32: jalr $25
Akira Hatanaka42a91ef2013-12-07 02:48:29 +000063; O32-NOT: move $gp
64; O32: lw $25, %call16(ceil)
Akira Hatanaka168d4e52013-11-27 23:38:42 +000065; O32-NOT: move $gp
66; O32: jalr $25
67
68; O32-LOADTGT-LABEL: caller4:
69; O32-LOADTGT-DAG: lw $25, %call16(ceil)
70; O32-LOADTGT-DAG: move $gp
71; O32-LOADTGT: jalr $25
Akira Hatanaka42a91ef2013-12-07 02:48:29 +000072; O32-LOADTGT-NOT: move $gp
73; O32-LOADTGT: move $25
Akira Hatanaka168d4e52013-11-27 23:38:42 +000074; O32-LOADTGT-NOT: move $gp
75; O32-LOADTGT: jalr $25
Akira Hatanaka42a91ef2013-12-07 02:48:29 +000076; O32-LOADTGT-NOT: move $gp
77; O32-LOADTGT: move $25
Akira Hatanaka168d4e52013-11-27 23:38:42 +000078; O32-LOADTGT-NOT: move $gp
79; O32-LOADTGT: jalr $25
80
81define void @caller4(double %d) {
82entry:
83 %call = tail call double @ceil(double %d)
84 %call1 = tail call double @ceil(double %call)
85 store double %call1, double* @gd2, align 8
86 %call2 = tail call double @ceil(double %call1)
87 store double %call2, double* @gd1, align 8
88 ret void
89}
90
91declare double @ceil(double)