I'm creating a front end (toy language for now and maybe forever) that emits LLVM IR directly (not via C++ library).
I looked but could not find real and practical examples of declaring and using either of the subject capabilities. The best I have to go on is the Language Reference.
Question is as stated in the title.
I couldn't find much from LLVM, but I found a more detailed explanation from the GCC docs.
Aliases, especially weak aliases, can be used to define default implementations of certain functions when the system headers don't define it. This question shows an example of its usage in the Linux glibc source.
Judging by this example, ifunc could be useful for when you want to select a different version of some function optimized for certain processors. The resolver function you write could use some OS-specific code to determine certain system characteristics (like the processor type) and return a pointer to the correct function.
Most of this is really low level stuff, so I'm 99% sure that you don't need to use them in a language front end.