Viewing file: nvptx-nrv1.C (1.88 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// { dg-do compile { target nvptx-*-* } } // { dg-additional-options "-m64" }
// Check NRV optimization doesn't change the PTX prototypes.
struct A { int d;
// { dg-final { scan-assembler-times ".weak .func _ZN1AC1Ev \\(.param.u64 %in_ar0\\)(?:;|\[\r\n\]+\{)" 2 } } A () { d = 123; } A (const A & o) { d = o.d; } void frob (); };
namespace unopt { // { dg-final { scan-assembler ".extern .func _ZN5unopt3fooEv \\(.param.u64 %in_ar0\\);" } } A __attribute__ ((__optimize__ ("O0"))) foo ();
// { dg-final { scan-assembler-times ".visible .func _ZN5unopt3barEv \\(.param.u64 %in_ar0\\)(?:;|\[\r\n\]+\{)" 2 } } A __attribute__ ((__optimize__ ("O0"), noinline)) bar() { A l; return l; }
// { dg-final { scan-assembler-times ".visible .func _ZN5unopt3bazEv \\(.param.u64 %in_ar0\\)(?:;|\[\r\n\]+\{)" 2 } } A __attribute__ ((__optimize__ ("O0"), noinline)) baz () { return foo (); }
void __attribute__ ((__optimize__ ("O0"), noinline)) quux () { bar ().frob (); baz ().frob (); foo ().frob (); } }
namespace opt { // { dg-final { scan-assembler ".extern .func _ZN3opt3fooEv \\(.param.u64 %in_ar0\\);" } } A __attribute__ ((__optimize__ ("O2"), noinline)) foo ();
// { dg-final { scan-assembler-times ".visible .func _ZN3opt3barEv \\(.param.u64 %in_ar0\\)(?:;|\[\r\n\]+\{)" 2 } } A __attribute__ ((__optimize__ ("O2"), noinline)) bar() { A l; return l; }
// { dg-final { scan-assembler-times ".visible .func _ZN3opt3bazEv \\(.param.u64 %in_ar0\\)(?:;|\[\r\n\]+\{)" 2 } } A __attribute__ ((__optimize__ ("O2"))) baz () { return foo (); }
void __attribute__ ((__optimize__ ("O2"), noinline)) quux () { bar ().frob (); baz ().frob (); foo ().frob (); } }
// Make sure we're not trying return a return value anywhere. // { dg-final { scan-assembler-not "st.param.u64\[\t \]*\\\[%out_retval\\\], %\[_a-z0-9\]*;" } }
|