Skip to content

Add inlining transformation to spirv-fuzz #3505

@afd

Description

@afd

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)

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions