From c50bbc9613229ba3e21d64d62827fcc6c5d951cd Mon Sep 17 00:00:00 2001
From: Chris Lattner
+What is this llvm.global_ctors and _GLOBAL__I__tmp_webcompile... stuff that happens when I #include <iostream>? +
+If you #include the <iostream> header into a C++ translation unit, the +file will probably use the std::cin/std::cout/... global +objects. However, C++ does not guarantee an order of initialization between +static objects in different translation units, so if a static ctor/dtor in your +.cpp file used std::cout, for example, the object would not necessarily +be automatically initialized before your use. +
+ ++To make std::cout and friends work correctly in these scenarios, the +STL that we use declares a static object that gets created in every translation +unit that includes <iostream>. This object has a static constructor and +destructor that initializes and destroys the global iostream objects before they +could possibly be used in the file. The code that you see in the .ll file +corresponds to the constructor and destructor registration code. +
+ ++If you would like to make it easier to understand the LLVM code generated +by the compiler in the demo page, consider using printf instead of iostreams to +print values. +
+