From bf088c3f12cb47d204fdd3df1bb8a2415d46ba7b Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 8 May 2024 23:06:46 -0700 Subject: Metal: propagate and specialize address space. (#4137) --- tests/metal/out-param.slang | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 tests/metal/out-param.slang (limited to 'tests') diff --git a/tests/metal/out-param.slang b/tests/metal/out-param.slang new file mode 100644 index 000000000..f9e89165a --- /dev/null +++ b/tests/metal/out-param.slang @@ -0,0 +1,44 @@ +//TEST:SIMPLE(filecheck=CHECK): -target metal +//TEST:SIMPLE(filecheck=METALLIB): -target metallib + +// Test that we can specailize mutable parameters based on the argument +// address space when generating code for Metal. + +//TEST_INPUT: ubuffer(data=[0 0 0 0], stride=4):out,name outputBuffer +RWStructuredBuffer outputBuffer; + +// CHECK: void Test_out_param{{.*}}(int thread* value{{.*}}) +// CHECK: void Test_out_param{{.*}}(int device* value{{.*}}) +// CHECK: void Test_out_param{{.*}}(int threadgroup* value{{.*}}) + +// CHECK: void Test_out_param_wrapper{{.*}}(int thread* value{{.*}}) +// CHECK: void Test_out_param_wrapper{{.*}}(int device* value{{.*}}) +// CHECK: void Test_out_param_wrapper{{.*}}(int threadgroup* value{{.*}}) + +void Test_out_param(out int value) +{ + value = 1; +} + +void Test_out_param_wrapper(out int value) +{ + Test_out_param(value); +} + +[numthreads(1,1,1)] +void computeMain() +{ + // METALLIB: define void @computeMain + + int value = 0; + Test_out_param_wrapper(value); + outputBuffer[0] = value; + + Test_out_param_wrapper(outputBuffer[1]); + + static groupshared int sharedValue[2]; + Test_out_param_wrapper(sharedValue[0]); + outputBuffer[2] = sharedValue[0]; + + outputBuffer[0]++; +} \ No newline at end of file -- cgit v1.2.3