1*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -S -emit-llvm %s -triple x86_64-unknown-linux-gnu -o - | FileCheck %s 2223b8240SDávid Bolvanský 3223b8240SDávid Bolvanský bool bar(); 4223b8240SDávid Bolvanský void f(bool, bool); 5223b8240SDávid Bolvanský void g(bool); 6223b8240SDávid Bolvanský baz(int x)7223b8240SDávid Bolvanskýstatic int baz(int x) { 8223b8240SDávid Bolvanský return x * 10; 9223b8240SDávid Bolvanský } 10223b8240SDávid Bolvanský noi()11223b8240SDávid Bolvanský[[clang::noinline]] bool noi() { } 12223b8240SDávid Bolvanský foo(int i)13223b8240SDávid Bolvanskývoid foo(int i) { 14223b8240SDávid Bolvanský [[clang::noinline]] bar(); 15223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3barv() #[[NOINLINEATTR:[0-9]+]] 16223b8240SDávid Bolvanský [[clang::noinline]] i = baz(i); 17223b8240SDávid Bolvanský // CHECK: call noundef i32 @_ZL3bazi({{.*}}) #[[NOINLINEATTR]] 18223b8240SDávid Bolvanský [[clang::noinline]] (i = 4, bar()); 19223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3barv() #[[NOINLINEATTR]] 20223b8240SDávid Bolvanský [[clang::noinline]] (void)(bar()); 21223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3barv() #[[NOINLINEATTR]] 22223b8240SDávid Bolvanský [[clang::noinline]] f(bar(), bar()); 23223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3barv() #[[NOINLINEATTR]] 24223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3barv() #[[NOINLINEATTR]] 25223b8240SDávid Bolvanský // CHECK: call void @_Z1fbb({{.*}}) #[[NOINLINEATTR]] 26223b8240SDávid Bolvanský [[clang::noinline]] [] { bar(); bar(); }(); // noinline only applies to the anonymous function call 27223b8240SDávid Bolvanský // CHECK: call void @"_ZZ3fooiENK3$_0clEv"(%class.anon* {{[^,]*}} %ref.tmp) #[[NOINLINEATTR]] 28223b8240SDávid Bolvanský [[clang::noinline]] for (bar(); bar(); bar()) {} 29223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3barv() #[[NOINLINEATTR]] 30223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3barv() #[[NOINLINEATTR]] 31223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3barv() #[[NOINLINEATTR]] 32223b8240SDávid Bolvanský bar(); 33223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3barv() 34223b8240SDávid Bolvanský [[clang::noinline]] noi(); 35223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3noiv() 36223b8240SDávid Bolvanský noi(); 37223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3noiv() 38223b8240SDávid Bolvanský [[gnu::noinline]] bar(); 39223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_Z3barv() 40223b8240SDávid Bolvanský } 41223b8240SDávid Bolvanský 42223b8240SDávid Bolvanský struct S { 43223b8240SDávid Bolvanský friend bool operator==(const S &LHS, const S &RHS); 44223b8240SDávid Bolvanský }; 45223b8240SDávid Bolvanský func(const S & s1,const S & s2)46223b8240SDávid Bolvanskývoid func(const S &s1, const S &s2) { 47223b8240SDávid Bolvanský [[clang::noinline]]g(s1 == s2); 48223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_ZeqRK1SS1_({{.*}}) #[[NOINLINEATTR]] 49223b8240SDávid Bolvanský // CHECK: call void @_Z1gb({{.*}}) #[[NOINLINEATTR]] 50223b8240SDávid Bolvanský bool b; 51223b8240SDávid Bolvanský [[clang::noinline]] b = s1 == s2; 52223b8240SDávid Bolvanský // CHECK: call noundef zeroext i1 @_ZeqRK1SS1_({{.*}}) #[[NOINLINEATTR]] 53223b8240SDávid Bolvanský } 54223b8240SDávid Bolvanský 55223b8240SDávid Bolvanský // CHECK: attributes #[[NOINLINEATTR]] = { noinline } 56