OSDN Git Service

Answer a common FAQ:
authorDan Gohman <gohman@apple.com>
Tue, 10 Feb 2009 17:26:53 +0000 (17:26 +0000)
committerDan Gohman <gohman@apple.com>
Tue, 10 Feb 2009 17:26:53 +0000 (17:26 +0000)
"Can I compile C or C++ code to platform-independent LLVM bitcode?"

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64222 91177308-0d34-0410-b5e6-96231b3b80d8

docs/FAQ.html

index ad08f10..d94c368 100644 (file)
@@ -87,6 +87,8 @@
 
     <li><a href="#translatecxx">Can I use LLVM to convert C++ code to C code?</a></li>
 
+    <li><a href="#platformindependent">Can I compile C or C++ code to platform-independent LLVM bitcode?</a></li>
+
   </ol>
   </li>
 
@@ -629,6 +631,31 @@ with standard C++ libraries.</p>
 
 </div>
 
+<div class="question">
+<p>
+<a name="platformindependent">Can I compile C or C++ code to platform-independent LLVM bitcode?</a>
+</p>
+</div>
+
+<div class="answer">
+
+<p>No. C and C++ are inherently platform-dependent languages. The most
+obvious example of this is the preprocessor. A very common way that C code
+is made portable is by using the preprocessor to include platform-specific
+code. In practice, information about other platforms is lost after
+preprocessing, so the result is inherently dependent on the platform that
+the preprocessing was targetting.</p>
+
+<p>Another example is <tt>sizeof</tt>. It's common for <tt>sizeof(long)</tt>
+to vary between platforms. In most C front-ends, <tt>sizeof</tt> is expanded
+to a constant immediately, thus hardwaring a platform-specific detail.</p>
+
+<p>Also, since many platforms define their ABIs in terms of C, and since
+LLVM is lower-level than C, front-ends currently must emit platform-specific
+IR in order to have the result conform to the platform ABI.</p>
+
+</div>
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="cfe_code">Questions about code generated by the GCC front-end</a>