-
Notifications
You must be signed in to change notification settings - Fork 664
Add inlining transformation to spirv-fuzz #3505
Description
Inlining is an interesting transformation to apply in spirv-fuzz. For technical reasons it makes sense to implement our own simple inliner rather than to re-use the opt inliner.
Some technical details discussed with @andreperezmaselco:
FUZZING
Foo:
%1 = some_instruction
%2 = some_instruction
Main:
%3 = OpFunctionCall Foo
----- Fuzzer pass add loads ----
Foo:
%1 = some_instruction
%4 = OpLoad ...
%2 = some_instruction
Main:
%3 = OpFunctionCall Foo
------ Inline foo -----
Foo:
%1 = some_instruction
%4 = OpLoad ...
%2 = some_instruction
Main:
%5 = some_instruction
%6 = OpLoad
%7 = some_instruction
------- Transform instruction %7 ----
Foo:
%1 = some_instruction
%4 = OpLoad ...
%2 = some_instruction
Main:
%5 = some_instruction
%6 = OpLoad
%7 = transformed(some_instruction)
SHRINKING
Foo:
%1 = some_instruction
%2 = some_instruction
Main:
%3 = OpFunctionCall Foo
------ Inline foo -----
Foo:
%1 = some_instruction
%2 = some_instruction
Main:
%5 = some_instruction
%6 = some_instruction
------- Transform instruction %7 ----
NOT APPLICABLE - there is no instruction %7
ALTERNATIVE
FUZZING
Foo:
%1 = some_instruction
%2 = some_instruction
Main:
%3 = OpFunctionCall Foo
----- Fuzzer pass add loads ----
Foo:
%1 = some_instruction
%4 = OpLoad ...
%2 = some_instruction
Main:
%3 = OpFunctionCall Foo
------ Inline foo: [%1 -> %5, %4 -> %6, %2 -> %7] -----
Foo:
%1 = some_instruction
%4 = OpLoad ...
%2 = some_instruction
Main:
%5 = some_instruction
%6 = OpLoad
%7 = some_instruction
------- Transform instruction %7 ----
Foo:
%1 = some_instruction
%4 = OpLoad ...
%2 = some_instruction
Main:
%5 = some_instruction
%6 = OpLoad
%7 = transformed(some_instruction)
SHRINKING
Foo:
%1 = some_instruction
%2 = some_instruction
Main:
%3 = OpFunctionCall Foo
------ Inline foo: [%1 -> %5, %4 -> %6, %2 -> %7] -----
Foo:
%1 = some_instruction
%2 = some_instruction
Main:
%5 = some_instruction
%7 = some_instruction
------- Transform instruction %7 ----
IS applicable as %7 still exists
Foo:
%1 = some_instruction
%2 = some_instruction
Main:
%5 = some_instruction
%7 = transformed(some_instruction)