view gcc/testsuite/brig.dg/test/gimple/variables.hsail @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line source

module &module:1:0:$full:$large:$default;

/* Tests for different variable scopes and address spaces. */

/* { dg-do compile } */
/* { dg-options "-fdump-tree-gimple -fdump-tree-original" } */

prog align(256) private_u32 &prog_private;
private_u32 &mod_private;

prog group_u32 &prog_group;
group_u32 &mod_group;

prog global_u32 &prog_global;
global_u32 &mod_global;

decl prog global_u32 &prog_global_host_def;

prog readonly_u32 &prog_readonly;
readonly_u32 &mod_readonly;

prog function &subfunction(arg_u32 %return_value)(arg_u32 %arg) {

     private_u32 %func_private;
     group_u32 %func_group;
     align(256) global_u32 %func_global;
     readonly_u32 %func_readonly;

     ld_private_u32 $s200, [%func_private];
     st_private_u32 $s200, [&prog_private];

/* { dg-final { scan-tree-dump "__group_base_addr \\\+ \\\(0 \\\+" "original" } } */
     ld_group_u32 $s203, [%func_group];

/* { dg-final { scan-tree-dump "__group_base_addr \\\+ 0" "original" } } */
     st_group_u32 $s203, [&prog_group];

     ld_global_u32 $s204, [%func_global];
     st_global_u32 $s204, [&prog_global];

     ld_readonly_u32 $s205, [%func_readonly];
     st_global_u32 $s205, [%func_global];

     st_arg_u32 $s2, [%return_value];
     ret;
};

prog kernel &kernel(kernarg_u64 %input_ptr, kernarg_u64 %output_ptr)
{
	private_u32 %kern_private;
	group_u32 %kern_group;
	global_u32 %kern_global;
	readonly_u32 %kern_readonly;

        ld_kernarg_u64 $d0, [%input_ptr];
        ld_global_u32 $s0, [$d0];

	ld_private_u32 $s2, [&prog_private];
	st_private_u32 $s2, [%kern_private];
	ld_private_u32 $s3, [&mod_private];
	st_private_u32 $s3, [&prog_private];

	ld_group_u32 $s4, [&prog_group];
	st_group_u32 $s4, [%kern_group];
	ld_group_u32 $s5, [&mod_group];
	st_group_u32 $s5, [&prog_group];

	ld_global_u32 $s6, [&prog_global];
	st_global_u32 $s6, [%kern_global];
	ld_global_u32 $s7, [&mod_global];
	st_global_u32 $s7, [&prog_global];

	ld_readonly_u32 $s8, [&prog_readonly];
	st_global_u32 $s8, [%kern_global];
	ld_readonly_u32 $s9, [&mod_readonly];
	st_global_u32 $s9, [&prog_global];

	ld_readonly_u32 $s10, [%kern_readonly];
	st_global_u32 $s10, [%kern_global];
	ld_readonly_u32 $s11, [%kern_readonly];
	st_global_u32 $s11, [&prog_global_host_def];

	{
		arg_u32 %arg;
		arg_u32 %return_value;
		st_arg_u32 $s1, [%arg];
		call &subfunction(%return_value)(%arg);
		ld_arg_u32 $s1, [%return_value];
	}
        ld_kernarg_u64 $d1, [%output_ptr];
        st_global_u32 $s1, [$d0];
};

/* Private variable offsets assigned in the order of their appearance */
/*
 prog_private @0	(align 256) -> until 254 to ensure all WIs
 mod_private  @256	               have their chunks aligned
 func_private @260
 kern_private @264
*/

/* Group variable offsets assigned in the order of their appearance */
/*
 prog_group @0		(2)
 mod_group  @4		(4)
 func_group @8		(1)
 kern_group @12		(3)
*/

/* The "mangling" of the global and readonly vars. */
/* { dg-final { scan-tree-dump "\[ \]*prog_global = s204;" "gimple" } } */

/* { dg-final { scan-tree-dump "\.module.mod_global;" "gimple" } } */

/* Host defined variables need indirect access as the address is
   known only at run time. */
/* { dg-final { scan-tree-dump "\\\*\\\__phsa.host_def.prog_global_host_def.\[0-9\]+_\[0-9\]+ = s11;" "gimple" } } */

/* { dg-final { scan-tree-dump "\.subfunction.func_global;" "gimple" } } */
/* { dg-final { scan-tree-dump "\.subfunction.func_readonly;" "gimple" } } */

/* { dg-final { scan-tree-dump "kernel.kern_global" "gimple" } } */
/* { dg-final { scan-tree-dump "kernel.kern_readonly" "gimple" } } */