forked from OSchip/llvm-project
				
			
							parent
							
								
									93246cc475
								
							
						
					
					
						commit
						8ae4e24c67
					
				| 
						 | 
					@ -1251,38 +1251,42 @@ target datalayout = "<i>layout specification</i>"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<div class="doc_text">
 | 
					<div class="doc_text">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<p>Any memory access must be done though a pointer value associated
 | 
					<p>Any memory access must be done through a pointer value associated
 | 
				
			||||||
with an address range of the memory access, otherwise the behavior
 | 
					with an address range of the memory access, otherwise the behavior
 | 
				
			||||||
is undefined. Pointer values are associated with address ranges
 | 
					is undefined. Pointer values are associated with address ranges
 | 
				
			||||||
according to the following rules:</p>
 | 
					according to the following rules:</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<ul>
 | 
					<ul>
 | 
				
			||||||
  <li>A pointer value formed from a <tt>getelementptr</tt> instruction is
 | 
					  <li>A pointer value formed from a
 | 
				
			||||||
      associated with the addresses associated with the first operand of
 | 
					      <tt><a href="#i_getelementptr">getelementptr</a></tt> instruction
 | 
				
			||||||
      the <tt>getelementptr</tt>.</li>
 | 
					      is associated with the addresses associated with the first operand
 | 
				
			||||||
  <li>An addresses of a global variable is associated with the address
 | 
					      of the <tt>getelementptr</tt>.</li>
 | 
				
			||||||
 | 
					  <li>An address of a global variable is associated with the address
 | 
				
			||||||
      range of the variable's storage.</li>
 | 
					      range of the variable's storage.</li>
 | 
				
			||||||
  <li>The result value of an allocation instruction is associated with
 | 
					  <li>The result value of an allocation instruction is associated with
 | 
				
			||||||
      the address range of the allocated storage.</li>
 | 
					      the address range of the allocated storage.</li>
 | 
				
			||||||
  <li>A null pointer in the default address-space is associated with
 | 
					  <li>A null pointer in the default address-space is associated with
 | 
				
			||||||
      no addresses.</li>
 | 
					      no address.</li>
 | 
				
			||||||
  <li>A pointer value formed by an <tt>inttoptr</tt> is associated with
 | 
					  <li>A pointer value formed by an
 | 
				
			||||||
      all address ranges of all pointer values that contribute (directly
 | 
					      <tt><a href="#i_inttoptr">inttoptr</a></tt> is associated with all
 | 
				
			||||||
      or indirectly) to the computation of the pointer's value.</li>
 | 
					      address ranges of all pointer values that contribute (directly or
 | 
				
			||||||
  <li>The result value of a <tt>bitcast</tt> is associated with all
 | 
					      indirectly) to the computation of the pointer's value.</li>
 | 
				
			||||||
 | 
					  <li>The result value of a
 | 
				
			||||||
 | 
					      <tt><a href="#i_bitcast">bitcast</a></tt> is associated with all
 | 
				
			||||||
      addresses associated with the operand of the <tt>bitcast</tt>.</li>
 | 
					      addresses associated with the operand of the <tt>bitcast</tt>.</li>
 | 
				
			||||||
  <li>An integer constant other than zero or a pointer value returned
 | 
					  <li>An integer constant other than zero or a pointer value returned
 | 
				
			||||||
      from a function not defined within LLVM may be associated with address
 | 
					      from a function not defined within LLVM may be associated with address
 | 
				
			||||||
      ranges allocated through mechanisms other than those provided by
 | 
					      ranges allocated through mechanisms other than those provided by
 | 
				
			||||||
      LLVM. Such ranges shall not overlap with any ranges of address
 | 
					      LLVM. Such ranges shall not overlap with any ranges of addresses
 | 
				
			||||||
      allocated by mechanisms provided by LLVM.</li>
 | 
					      allocated by mechanisms provided by LLVM.</li>
 | 
				
			||||||
  </ul>
 | 
					  </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<p>LLVM IR does not associate types with memory. The result type of a
 | 
					<p>LLVM IR does not associate types with memory. The result type of a
 | 
				
			||||||
<tt>load</tt> merely indicates the size and alignment of the memory from
 | 
					<tt><a href="#i_load">load</a></tt> merely indicates the size and
 | 
				
			||||||
which to load, as well as the interpretation of the value. The first
 | 
					alignment of the memory from which to load, as well as the
 | 
				
			||||||
operand of a <tt>store</tt> similarly only indicates the size and
 | 
					interpretation of the value. The first operand of a
 | 
				
			||||||
alignment of the store.</p>
 | 
					<tt><a href="#i_store">store</a></tt> similarly only indicates the size
 | 
				
			||||||
 | 
					and alignment of the store.</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<p>Consequently, type-based alias analysis, aka TBAA, aka
 | 
					<p>Consequently, type-based alias analysis, aka TBAA, aka
 | 
				
			||||||
<tt>-fstrict-aliasing</tt>, is not applicable to general unadorned
 | 
					<tt>-fstrict-aliasing</tt>, is not applicable to general unadorned
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue