blob: dcae0243300c7dec3929e0970a26d9889092872f [file] [log] [blame]
Chris Lattner4b7b42c2010-04-30 22:37:22 +00001; The inliner should never inline recursive functions into other functions.
2; This effectively is just peeling off the first iteration of a loop, and the
3; inliner heuristics are not set up for this.
4
5; RUN: opt -inline %s -S | grep "call void @foo(i32 42)"
6
7target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
8target triple = "x86_64-apple-darwin10.3"
9
10@g = common global i32 0 ; <i32*> [#uses=1]
11
12define internal void @foo(i32 %x) nounwind ssp {
13entry:
14 %"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
15 %0 = icmp slt i32 %x, 0 ; <i1> [#uses=1]
16 br i1 %0, label %return, label %bb
17
18bb: ; preds = %entry
19 %1 = sub nsw i32 %x, 1 ; <i32> [#uses=1]
20 call void @foo(i32 %1) nounwind ssp
21 volatile store i32 1, i32* @g, align 4
22 ret void
23
24return: ; preds = %entry
25 ret void
26}
27
28define void @bonk() nounwind ssp {
29entry:
30 call void @foo(i32 42) nounwind ssp
31 ret void
32}