14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// Make sure -finline-functions family flags are behaving correctly.
24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -triple i686-pc-win32 -emit-llvm %s -o - | FileCheck -check-prefix=NOINLINE %s
44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -triple i686-pc-win32 -O3 -fno-inline-functions -emit-llvm %s -o - | FileCheck -check-prefix=NOINLINE %s
54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -triple i686-pc-win32 -finline-hint-functions -emit-llvm %s -o - | FileCheck -check-prefix=HINT %s
64967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -triple i686-pc-win32 -finline-functions -emit-llvm %s -o - | FileCheck -check-prefix=INLINE %s
74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarinline int inline_hint(int a, int b) { return(a+b); }
94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarint inline_no_hint(int a, int b) { return (a/b); }
114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarinline __attribute__ ((__always_inline__)) int inline_always(int a, int b) { return(a*b); }
134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar
144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvolatile int *pa = (int*) 0x1000;
154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid foo() {
164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOINLINE-LABEL: @foo
174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// HINT-LABEL: @foo
184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// INLINE-LABEL: @foo
194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOINLINE: call i32 @inline_hint
204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// HINT-NOT: call i32 @inline_hint
214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// INLINE-NOT: call i32 @inline_hint
224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    pa[0] = inline_hint(pa[1],pa[2]);
234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOINLINE-NOT: call i32 @inline_always
244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// HINT-NOT: call i32 @inline_always
254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// INLINE-NOT: call i32 @inline_always
264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    pa[3] = inline_always(pa[4],pa[5]);
274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// NOINLINE: call i32 @inline_no_hint
284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// HINT: call i32 @inline_no_hint
294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// INLINE-NOT: call i32 @inline_no_hint
304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar    pa[6] = inline_no_hint(pa[7], pa[8]);
314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}
32