Argyrios Kyrtzidis 
							
						 
					 
					
						
						
							
						
						acb8d9fbe3 
					 
					
						
						
							
							Eliminate redundant bitwise operations when using a llvm/ADT/PointerUnion.  
						
						... 
						
						
						
						For comparison, with this code sample:
PointerUnion<int *, char *> Data;
PointerUnion<int *, char *> foo1() {
	Data = new int;
	return new int;
}
PointerUnion<int *, char *> foo2() {
	Data = new char;
	return new char;
}
Before this patch we would get:
define i64 @_Z4foo1v() uwtable ssp {
  %1 = tail call noalias i8* @_Znwm(i64 4)
  %2 = ptrtoint i8* %1 to i64
  %3 = load i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8
  %4 = and i64 %3, 1
  %.masked.i = and i64 %2, -3
  %5 = or i64 %4, %.masked.i
  store i64 %5, i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8
  %6 = tail call noalias i8* @_Znwm(i64 4)
  %7 = ptrtoint i8* %6 to i64
  %8 = and i64 %7, -3
  ret i64 %8
}
define i64 @_Z4foo2v() uwtable ssp {
  %1 = tail call noalias i8* @_Znwm(i64 1)
  %2 = ptrtoint i8* %1 to i64
  %3 = load i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8
  %4 = and i64 %3, 1
  %5 = or i64 %2, %4
  %6 = or i64 %5, 2
  store i64 %6, i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8
  %7 = tail call noalias i8* @_Znwm(i64 1)
  %8 = ptrtoint i8* %7 to i64
  %9 = or i64 %8, 2
  ret i64 %9
}
After the patch:
define i64 @_Z4foo1v() uwtable ssp {
  %1 = tail call noalias i8* @_Znwm(i64 4)
  %2 = ptrtoint i8* %1 to i64
  store i64 %2, i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8
  %3 = tail call noalias i8* @_Znwm(i64 4)
  %4 = ptrtoint i8* %3 to i64
  ret i64 %4
}
declare noalias i8* @_Znwm(i64)
define i64 @_Z4foo2v() uwtable ssp {
  %1 = tail call noalias i8* @_Znwm(i64 1)
  %2 = ptrtoint i8* %1 to i64
  %3 = or i64 %2, 2
  store i64 %3, i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8
  %4 = tail call noalias i8* @_Znwm(i64 1)
  %5 = ptrtoint i8* %4 to i64
  %6 = or i64 %5, 2
  ret i64 %6
}
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169147  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-12-03 19:59:23 +00:00 
						 
				 
			
				
					
						
							
							
								Richard Smith 
							
						 
					 
					
						
						
							
						
						1144af3c9b 
					 
					
						
						
							
							Fix integer undefined behavior due to signed left shift overflow in LLVM.  
						
						... 
						
						
						
						Reviewed offline by chandlerc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162623  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-08-24 23:29:28 +00:00 
						 
				 
			
				
					
						
							
							
								Jordan Rose 
							
						 
					 
					
						
						
							
						
						6ef4996b09 
					 
					
						
						
							
							Allow PointerIntPairs to be created from const void *.  
						
						... 
						
						
						
						For a measure of safety, this conversion is only permitted if the
stored pointer type can also be created from a const void *.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160456  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-07-18 21:58:49 +00:00 
						 
				 
			
				
					
						
							
							
								Argyrios Kyrtzidis 
							
						 
					 
					
						
						
							
						
						0db235a2b0 
					 
					
						
						
							
							PointerUnion::getAddrOf() does not need to be template since we can only  
						
						... 
						
						
						
						use the first pointer type for it. Rename it to getAddrOfPtr1().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152106  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-03-06 07:14:54 +00:00 
						 
				 
			
				
					
						
							
							
								Argyrios Kyrtzidis 
							
						 
					 
					
						
						
							
						
						38297f5f76 
					 
					
						
						
							
							Allow getting the address of the value in a PointerUnion or PointerIntPair if one is  
						
						... 
						
						
						
						confident enough that he knows what he is doing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126019  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-02-19 03:55:58 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						4bbf4ee149 
					 
					
						
						
							
							Remove isPod() from DenseMapInfo, splitting it out to its own  
						
						... 
						
						
						
						isPodLike type trait.  This is a generally useful type trait for
more than just DenseMap, and we really care about whether something
acts like a pod, not whether it really is a pod.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91421  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-12-15 07:26:43 +00:00 
						 
				 
			
				
					
						
							
							
								John McCall 
							
						 
					 
					
						
						
							
						
						2fed70daaf 
					 
					
						
						
							
							Fix a few places where PointerIntPair was using PointerLikeTypeTraits<PointerTy>  
						
						... 
						
						
						
						instead of the PtrTraits provided.  Allows PointerIntPair to contain a
PointerUnion safely, as long as the bits add up.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82163  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-09-17 20:35:18 +00:00 
						 
				 
			
				
					
						
							
							
								Bill Wendling 
							
						 
					 
					
						
						
							
						
						3485d25a0e 
					 
					
						
						
							
							I cast, therefore I think I know what I'm doing.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70151  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-04-26 20:12:38 +00:00 
						 
				 
			
				
					
						
							
							
								Bill Wendling 
							
						 
					 
					
						
						
							
						
						b14a495c36 
					 
					
						
						
							
							Use uint64_t instead of unsigned.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70148  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-04-26 19:46:41 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						1e8db00e3b 
					 
					
						
						
							
							revert an incorrect patch.  This causes crashes all over the place on a  
						
						... 
						
						
						
						64-bit build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70147  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-04-26 19:44:20 +00:00 
						 
				 
			
				
					
						
							
							
								Bill Wendling 
							
						 
					 
					
						
						
							
						
						610cb31ac9 
					 
					
						
						
							
							Suppress warnings about conversion shortening 64-bit to 32-bit.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70138  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-04-26 18:10:20 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						c6a4b6b78b 
					 
					
						
						
							
							fix the PointerLikeTypeTraits specialization for PointerIntPair to  
						
						... 
						
						
						
						allow the traits to be specified as well.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68055  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-03-30 20:28:50 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						54e01d06db 
					 
					
						
						
							
							add missing space.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67995  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-03-29 13:26:05 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						f341a47d10 
					 
					
						
						
							
							When forming sentinels for empty/tombstone, make sure to respect the  
						
						... 
						
						
						
						pointer's expected number of zero low-bits.
This should fix the breakage I introduced recently.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67990  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-03-29 06:33:22 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						540db8bcb8 
					 
					
						
						
							
							Allow a specific PointerIntPair instance to use a specific Pointer trait:  
						
						... 
						
						
						
						some pointer instances have properties that not all of a type have.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67986  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-03-29 06:02:20 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						e30173ac33 
					 
					
						
						
							
							Replace the PointerLikeTypeTraits::getNumLowBitsAvailable  
						
						... 
						
						
						
						function with a new NumLowBitsAvailable enum, which makes the
value available as an integer constant expression.
Add PointerLikeTypeTraits specializations for Instruction* and
Use** since they are only guaranteed 4-byte aligned.
Enhance PointerIntPair to know about (and enforce) the alignment
specified by PointerLikeTypeTraits.  This should allow things 
like PointerIntPair<PointerIntPair<void*, 1,bool>, 1, bool> 
because the inner one knows that 2 low bits are free.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67979  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-03-29 04:32:37 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						8ee1b5e916 
					 
					
						
						
							
							rename PointerLikeTypeInto to PointerLikeTypeTraits, add trait for  
						
						... 
						
						
						
						# low bits free, and move to its own header.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67973  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-03-29 00:39:30 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						4d4177b9b3 
					 
					
						
						
							
							teach SmallPtrSet that PointerIntPair is "basically a pointer".  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67970  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-03-29 00:18:42 +00:00 
						 
				 
			
				
					
						
							
							
								Duncan Sands 
							
						 
					 
					
						
						
							
						
						6ea5776f51 
					 
					
						
						
							
							Get this building with gcc-4.4.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62322  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-01-16 15:54:57 +00:00 
						 
				 
			
				
					
						
							
							
								Misha Brukman 
							
						 
					 
					
						
						
							
						
						3a54b3dc87 
					 
					
						
						
							
							Removed trailing whitespace.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62000  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2009-01-09 19:25:42 +00:00 
						 
				 
			
				
					
						
							
							
								Dan Gohman 
							
						 
					 
					
						
						
							
						
						b79a01111d 
					 
					
						
						
							
							Move the conversion to intptr_t to a separate statement. This  
						
						... 
						
						
						
						avoids GCC's warning even on 64-bit hosts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60706  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2008-12-08 17:41:24 +00:00 
						 
				 
			
				
					
						
							
							
								Dan Gohman 
							
						 
					 
					
						
						
							
						
						994fd5354b 
					 
					
						
						
							
							Use intptr_t instead of unsigned here, which is more appropriate  
						
						... 
						
						
						
						in a really obscure way, but more importantly has the side effect
of avoiding a GCC warning in the case that IntType is bool.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60677  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2008-12-07 21:28:00 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						012618f0fc 
					 
					
						
						
							
							add the rest of the comparison routines.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60303  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2008-11-30 19:10:41 +00:00 
						 
				 
			
				
					
						
							
							
								Torok Edwin 
							
						 
					 
					
						
						
							
						
						10ca770020 
					 
					
						
						
							
							protect against negative values that would exceed allowed bit width  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60239  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2008-11-29 08:52:45 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						b9cf75a15f 
					 
					
						
						
							
							apparently GCC doesn't believe that I understand C  
						
						... 
						
						
						
						precedence rules.  Pacify it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60237  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2008-11-29 08:36:39 +00:00 
						 
				 
			
				
					
						
							
							
								Duncan Sands 
							
						 
					 
					
						
						
							
						
						3f7dba7b17 
					 
					
						
						
							
							Typo fix.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60236  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2008-11-29 08:03:35 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						d63e618212 
					 
					
						
						
							
							Fix sentinels to use correctly 'aligned' pointers.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60229  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2008-11-29 01:36:16 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						9ac30537aa 
					 
					
						
						
							
							Fix spello, add DenseMapInfo specialization for PointerIntPair.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60228  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2008-11-29 01:18:05 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						d55da4de04 
					 
					
						
						
							
							fix comment typo  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60227  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2008-11-28 23:57:26 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						762ac83271 
					 
					
						
						
							
							fix a bug.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60225  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2008-11-28 23:36:15 +00:00 
						 
				 
			
				
					
						
							
							
								Chris Lattner 
							
						 
					 
					
						
						
							
						
						34b763694e 
					 
					
						
						
							
							add a generic "bitmangled pointer" class, which allows a parameterized  
						
						... 
						
						
						
						pointer and integer type to be used.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60224  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2008-11-28 23:31:44 +00:00