Good test and validation sets for checking new optimisations

I am new to studying compilers, and one of the things I am trying to do is to implement an algorithm for Global Value Numbering.

For this, I would like to have a good set of cases against which to verify my implementation.

Is there such a thing?

Or in general for other optimizations?

Thanks for the link.

Although I read *.ll is a human readable assembly language code representation for LLVM IR, I wonder if there is a way I can consume this file and re-generate the source file (let’s say in C) which produced a .ll

If I’m wrong I’d appreciate to have a pointer to understand better those .ll, especially for someone who’s not used to write assembly.

There is no way to do this that I know of, I think there use to be a C backend but that does not make it really more readable.

The language is specified here: LLVM Language Reference Manual — LLVM 17.0.0git documentation

I don’t know if there are good tutorials but this maybe A Journey to understand LLVM-IR! - /undevs ?

Seems like a good tutorial / getting started doc that could be added!