Original patch by Tobias Grosser, slightly modified by Sebastian Pop. llvm-svn: 170420
llvm-svn: 169161
llvm-svn: 169159