summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-05-25 23:39:30 -0700
committerGitHub <noreply@github.com>2023-05-26 06:39:30 +0000
commitab284ca61d0c4c29ac7331b99a98f95bb3ad44e5 (patch)
tree761c50913404ee5bf0b827db781f75173c6c123a /tests
parentf88e1299b7715190ce82f3f4473f0d0eeaa2000e (diff)
Fix bug in legalizeFuncType that leads to invalid IR. (#2902)
* Fix bug in legalizeFuncType that leads to invalid IR. * Diagnose on functions that never returns when differentiate it. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/diagnostics/unbound-loop.slang43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/diagnostics/unbound-loop.slang b/tests/diagnostics/unbound-loop.slang
new file mode 100644
index 000000000..5e85c3c66
--- /dev/null
+++ b/tests/diagnostics/unbound-loop.slang
@@ -0,0 +1,43 @@
+//TEST:SIMPLE(filecheck=CHECK): -entry computeMain -target hlsl -profile cs_6_5
+
+
+RWStructuredBuffer<float> outputBuffer;
+
+typedef DifferentialPair<float> dpfloat;
+typedef float.Differential dfloat;
+
+// CHECK: function 'test_loop_with_continue' never returns
+[BackwardDifferentiable]
+float test_loop_with_continue(float y)
+{
+ float t = y;
+
+ // OOPS! No `++i`!
+ for (int i = 0; i < 3;)
+ {
+ if (t > 4.0)
+ continue;
+
+ t = t * t;
+ }
+
+ return t;
+}
+
+[numthreads(1, 1, 1)]
+void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+ {
+ dpfloat dpa = dpfloat(2.0, 0.0);
+
+ __bwd_diff(test_loop_with_continue)(dpa, 1.0f);
+ outputBuffer[0] = dpa.d; // Expect: 32.0
+ }
+
+ {
+ dpfloat dpa = dpfloat(0.4, 0.0);
+
+ __bwd_diff(test_loop_with_continue)(dpa, 1.0f);
+ outputBuffer[1] = dpa.d; // Expect: 0.0131072
+ }
+} \ No newline at end of file