Giovanni Mascellani
51f13391e6
vkd3d-shader/ir: Introduce a simple control flow graph structurizer.
...
The structurizer is implemented along the lines of what is usually called
the "structured program theorem": the control flow is completely
virtualized by mean of an additional TEMP register which stores the
block index which is currently running. The whole program is then
converted to a huge switch construction enclosed in a loop, executing
at each iteration the appropriate block and updating the register
depending on block jump instruction.
The algorithm's generality is also its major weakness: it accepts any
input program, even if its CFG is not reducible, but the output
program lacks any useful convergence information. It satisfies the
letter of the SPIR-V requirements, but it is expected that it will
be very inefficient to run on a GPU (unless a downstream compiler is
able to devirtualize the control flow and do a proper convergence
analysis pass). The algorithm is however very simple, and good enough
to at least pass tests, enabling further development. A better
alternative is expected to be upstreamed incrementally.
Side note: the structured program theorem is often called the
Böhm-Jacopini theorem; Böhm and Jacopini did indeed prove a variation
of it, but their algorithm is different from what is commontly attributed
to them and implemented here, so I opted for not using their name.
2024-02-06 23:07:07 +01:00
..
2024-01-24 22:37:44 +01:00
2023-11-10 20:23:50 +01:00
2023-11-20 22:07:19 +01:00
2024-01-23 20:26:19 +01:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2023-10-11 22:21:14 +02:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2023-11-09 21:14:42 +01:00
2023-11-09 21:14:42 +01:00
2023-10-11 22:21:14 +02:00
2024-01-02 23:03:07 +01:00
2023-11-10 20:23:50 +01:00
2023-10-11 22:21:14 +02:00
2024-02-01 22:24:58 +01:00
2023-06-28 21:40:32 +02:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2023-11-10 20:23:50 +01:00
2023-11-10 20:23:50 +01:00
2023-11-10 20:23:50 +01:00
2023-11-10 20:23:50 +01:00
2024-02-01 22:25:02 +01:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2024-01-23 20:26:29 +01:00
2023-10-11 22:21:14 +02:00
2024-01-24 22:37:44 +01:00
2023-06-28 21:40:32 +02:00
2023-10-11 22:21:14 +02:00
2024-02-06 23:07:07 +01:00
2023-11-06 23:09:03 +01:00
2023-11-06 23:09:03 +01:00
2023-11-09 21:14:42 +01:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2023-10-11 22:21:14 +02:00
2024-01-24 22:37:44 +01:00
2023-12-07 21:56:53 +01:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:38:04 +01:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2024-02-06 23:07:07 +01:00
2023-12-07 21:56:53 +01:00
2023-11-09 21:14:42 +01:00
2023-11-22 22:08:05 +01:00
2024-02-06 23:07:07 +01:00
2023-10-11 22:21:14 +02:00
2024-01-24 22:37:44 +01:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2023-06-28 21:40:32 +02:00
2024-01-24 22:37:44 +01:00
2023-06-28 21:40:32 +02:00
2023-06-28 21:40:32 +02:00
2023-06-28 21:40:32 +02:00
2023-07-04 22:39:24 +02:00
2023-06-28 21:40:32 +02:00
2023-11-22 22:08:05 +01:00
2024-02-01 22:25:02 +01:00
2023-06-28 21:40:32 +02:00
2023-06-28 21:40:32 +02:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2024-01-22 22:18:33 +01:00
2023-12-07 21:56:53 +01:00
2024-01-24 22:37:44 +01:00
2023-11-09 21:14:42 +01:00
2024-01-24 22:37:44 +01:00
2024-02-01 22:25:02 +01:00
2023-12-07 21:56:53 +01:00
2023-06-28 21:40:32 +02:00
2024-02-06 23:07:07 +01:00
2023-11-01 21:47:34 +01:00
2023-11-01 21:47:34 +01:00
2023-10-11 22:21:14 +02:00
2023-11-06 23:09:03 +01:00
2024-01-24 22:37:44 +01:00
2023-10-18 20:58:18 +02:00
2024-01-23 20:26:29 +01:00
2023-06-28 21:40:32 +02:00
2023-10-31 21:59:29 +01:00
2023-06-28 21:40:32 +02:00
2023-11-01 21:47:34 +01:00
2024-01-22 22:18:32 +01:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2023-06-28 21:40:32 +02:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2023-11-02 18:23:12 +01:00
2023-10-11 22:21:14 +02:00
2024-02-01 22:25:02 +01:00
2023-12-07 21:56:53 +01:00
2024-01-24 22:37:44 +01:00
2024-01-29 22:33:27 +01:00
2024-02-01 22:25:02 +01:00
2023-10-11 22:21:14 +02:00
2024-02-06 23:07:07 +01:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2023-10-11 22:21:14 +02:00
2024-01-24 22:37:44 +01:00
2023-10-11 22:21:14 +02:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2023-11-09 21:14:42 +01:00
2023-06-28 21:40:32 +02:00
2023-10-11 22:21:14 +02:00
2024-01-24 22:37:44 +01:00
2023-06-28 21:40:32 +02:00
2024-02-06 23:07:07 +01:00
2024-01-24 22:37:44 +01:00
2023-12-07 21:56:53 +01:00
2023-10-11 22:21:14 +02:00
2024-01-24 22:37:44 +01:00
2024-01-24 22:37:44 +01:00
2023-11-01 21:47:34 +01:00
2023-11-01 21:47:34 +01:00
2023-06-28 21:40:32 +02:00
2023-12-14 23:19:30 +01:00
2024-02-06 23:07:07 +01:00
2024-02-01 22:25:02 +01:00
2023-11-01 21:47:34 +01:00
2023-11-01 21:47:34 +01:00
2024-01-11 23:04:48 +01:00
2024-01-11 23:04:48 +01:00
2024-01-15 19:57:42 +01:00
2024-01-24 22:37:44 +01:00
2024-02-01 22:25:02 +01:00
2024-02-01 22:25:04 +01:00
2024-02-01 22:25:02 +01:00
2023-10-11 22:21:14 +02:00
2023-06-28 21:40:32 +02:00
2024-01-25 22:24:44 +01:00
2024-01-24 22:37:44 +01:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2023-10-11 22:21:14 +02:00
2023-10-19 23:07:31 +02:00
2023-10-11 22:21:14 +02:00
2023-11-01 21:47:34 +01:00
2024-01-24 22:37:44 +01:00
2024-01-15 19:57:12 +01:00
2023-11-06 23:09:03 +01:00
2023-11-06 23:09:03 +01:00
2023-06-28 21:40:32 +02:00
2023-06-28 21:40:32 +02:00