Deprecate the Long1 type.

It corresponds to a scalar MMX type, used mainly for vector shifts.
We no longer need these shifts, and they would have been non-trivial
to emulate with SSE2.

Change-Id: I77a94ff5a62e043b991d4d6fa9ddd436d450181d
Reviewed-on: https://swiftshader-review.googlesource.com/8249
Reviewed-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index 95fe59c..efcd874 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -2879,20 +2879,6 @@
 		return x86::psraw(lhs, rhs);
 	}
 
-	RValue<Short4> operator<<(RValue<Short4> lhs, RValue<Long1> rhs)
-	{
-	//	return RValue<Short4>(Nucleus::createShl(lhs.value, rhs.value));
-
-		return x86::psllw(lhs, rhs);
-	}
-
-	RValue<Short4> operator>>(RValue<Short4> lhs, RValue<Long1> rhs)
-	{
-	//	return RValue<Short4>(Nucleus::createAShr(lhs.value, rhs.value));
-
-		return x86::psraw(lhs, rhs);
-	}
-
 	RValue<Short4> operator+=(Short4 &lhs, RValue<Short4> rhs)
 	{
 		return lhs = lhs + rhs;
@@ -2943,16 +2929,6 @@
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<Short4> operator<<=(Short4 &lhs, RValue<Long1> rhs)
-	{
-		return lhs = lhs << rhs;
-	}
-
-	RValue<Short4> operator>>=(Short4 &lhs, RValue<Long1> rhs)
-	{
-		return lhs = lhs >> rhs;
-	}
-
 //	RValue<Short4> operator+(RValue<Short4> val)
 //	{
 //		return val;
@@ -3353,20 +3329,6 @@
 		return x86::psrlw(lhs, rhs);
 	}
 
-	RValue<UShort4> operator<<(RValue<UShort4> lhs, RValue<Long1> rhs)
-	{
-	//	return RValue<Short4>(Nucleus::createShl(lhs.value, rhs.value));
-
-		return As<UShort4>(x86::psllw(As<Short4>(lhs), rhs));
-	}
-
-	RValue<UShort4> operator>>(RValue<UShort4> lhs, RValue<Long1> rhs)
-	{
-	//	return RValue<Short4>(Nucleus::createLShr(lhs.value, rhs.value));
-
-		return x86::psrlw(lhs, rhs);
-	}
-
 	RValue<UShort4> operator<<=(UShort4 &lhs, unsigned char rhs)
 	{
 		return lhs = lhs << rhs;
@@ -3377,16 +3339,6 @@
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<UShort4> operator<<=(UShort4 &lhs, RValue<Long1> rhs)
-	{
-		return lhs = lhs << rhs;
-	}
-
-	RValue<UShort4> operator>>=(UShort4 &lhs, RValue<Long1> rhs)
-	{
-		return lhs = lhs >> rhs;
-	}
-
 	RValue<UShort4> operator~(RValue<UShort4> val)
 	{
 		if(CPUID::supportsMMX2())
@@ -4086,31 +4038,6 @@
 		return T(llvm::Type::getInt64Ty(*::context));
 	}
 
-	Long1::Long1(const RValue<UInt> cast)
-	{
-		Value *undefCast = Nucleus::createInsertElement(V(UndefValue::get(VectorType::get(Int::getType(), 2))), cast.value, 0);
-		Value *zeroCast = Nucleus::createInsertElement(undefCast, V(Nucleus::createConstantInt(0)), 1);
-
-		storeValue(Nucleus::createBitCast(zeroCast, Long1::getType()));
-	}
-
-	Long1::Long1(RValue<Long1> rhs)
-	{
-		storeValue(rhs.value);
-	}
-
-	Type *Long1::getType()
-	{
-		if(CPUID::supportsMMX2())
-		{
-			return MMX::getType();
-		}
-		else
-		{
-			return T(VectorType::get(Long::getType(), 1));
-		}
-	}
-
 	UInt::UInt(Argument<UInt> argument)
 	{
 		storeValue(argument.value);
@@ -4521,7 +4448,13 @@
 			// movd mm0, lo
 			// movd mm1, hi
 			// punpckldq mm0, mm1
-			storeValue(As<Int2>(UnpackLow(As<Int2>(Long1(RValue<UInt>(lo))), As<Int2>(Long1(RValue<UInt>(hi))))).value);
+
+			Value *loLong = Nucleus::createInsertElement(V(UndefValue::get(VectorType::get(Int::getType(), 2))), lo.value, 0);
+			loLong = Nucleus::createInsertElement(loLong, V(ConstantInt::get(Int::getType(), 0)), 1);
+			Value *hiLong = Nucleus::createInsertElement(V(UndefValue::get(VectorType::get(Int::getType(), 2))), hi.value, 0);
+			hiLong = Nucleus::createInsertElement(hiLong, V(ConstantInt::get(Int::getType(), 0)), 1);
+
+			storeValue(As<Int2>(UnpackLow(As<Int2>(loLong), As<Int2>(hiLong))).value);
 		}
 		else
 		{
@@ -4644,20 +4577,6 @@
 		return x86::psrad(lhs, rhs);
 	}
 
-	RValue<Int2> operator<<(RValue<Int2> lhs, RValue<Long1> rhs)
-	{
-	//	return RValue<Int2>(Nucleus::createShl(lhs.value, rhs.value));
-
-		return x86::pslld(lhs, rhs);
-	}
-
-	RValue<Int2> operator>>(RValue<Int2> lhs, RValue<Long1> rhs)
-	{
-	//	return RValue<Int2>(Nucleus::createAShr(lhs.value, rhs.value));
-
-		return x86::psrad(lhs, rhs);
-	}
-
 	RValue<Int2> operator+=(Int2 &lhs, RValue<Int2> rhs)
 	{
 		return lhs = lhs + rhs;
@@ -4708,16 +4627,6 @@
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<Int2> operator<<=(Int2 &lhs, RValue<Long1> rhs)
-	{
-		return lhs = lhs << rhs;
-	}
-
-	RValue<Int2> operator>>=(Int2 &lhs, RValue<Long1> rhs)
-	{
-		return lhs = lhs >> rhs;
-	}
-
 //	RValue<Int2> operator+(RValue<Int2> val)
 //	{
 //		return val;
@@ -4740,7 +4649,7 @@
 		}
 	}
 
-	RValue<Long1> UnpackLow(RValue<Int2> x, RValue<Int2> y)
+	RValue<Short4> UnpackLow(RValue<Int2> x, RValue<Int2> y)
 	{
 		if(CPUID::supportsMMX2())
 		{
@@ -4751,11 +4660,11 @@
 			int shuffle[2] = {0, 2};
 			Value *packed = Nucleus::createShuffleVector(x.value, y.value, shuffle);
 
-			return RValue<Long1>(Nucleus::createBitCast(packed, Long1::getType()));
+			return As<Short4>(packed);
 		}
 	}
 
-	RValue<Long1> UnpackHigh(RValue<Int2> x, RValue<Int2> y)
+	RValue<Short4> UnpackHigh(RValue<Int2> x, RValue<Int2> y)
 	{
 		if(CPUID::supportsMMX2())
 		{
@@ -4766,7 +4675,7 @@
 			int shuffle[2] = {1, 3};
 			Value *packed = Nucleus::createShuffleVector(x.value, y.value, shuffle);
 
-			return RValue<Long1>(Nucleus::createBitCast(packed, Long1::getType()));
+			return As<Short4>(packed);
 		}
 	}
 
@@ -4958,20 +4867,6 @@
 		return x86::psrld(lhs, rhs);
 	}
 
-	RValue<UInt2> operator<<(RValue<UInt2> lhs, RValue<Long1> rhs)
-	{
-	//	return RValue<UInt2>(Nucleus::createShl(lhs.value, rhs.value));
-
-		return As<UInt2>(x86::pslld(As<Int2>(lhs), rhs));
-	}
-
-	RValue<UInt2> operator>>(RValue<UInt2> lhs, RValue<Long1> rhs)
-	{
-	//	return RValue<UInt2>(Nucleus::createLShr(lhs.value, rhs.value));
-
-		return x86::psrld(lhs, rhs);
-	}
-
 	RValue<UInt2> operator+=(UInt2 &lhs, RValue<UInt2> rhs)
 	{
 		return lhs = lhs + rhs;
@@ -5022,16 +4917,6 @@
 		return lhs = lhs >> rhs;
 	}
 
-	RValue<UInt2> operator<<=(UInt2 &lhs, RValue<Long1> rhs)
-	{
-		return lhs = lhs << rhs;
-	}
-
-	RValue<UInt2> operator>>=(UInt2 &lhs, RValue<Long1> rhs)
-	{
-		return lhs = lhs >> rhs;
-	}
-
 //	RValue<UInt2> operator+(RValue<UInt2> val)
 //	{
 //		return val;
@@ -7097,18 +6982,18 @@
 			return RValue<Int>(V(::builder->CreateCall2(pextrw, As<MMX>(x).value, V(Nucleus::createConstantInt(i)))));
 		}
 
-		RValue<Long1> punpckldq(RValue<Int2> x, RValue<Int2> y)
+		RValue<Short4> punpckldq(RValue<Int2> x, RValue<Int2> y)
 		{
 			llvm::Function *punpckldq = Intrinsic::getDeclaration(::module, Intrinsic::x86_mmx_punpckldq);
 
-			return As<Long1>(V(::builder->CreateCall2(punpckldq, As<MMX>(x).value, As<MMX>(y).value)));
+			return As<Short4>(V(::builder->CreateCall2(punpckldq, As<MMX>(x).value, As<MMX>(y).value)));
 		}
 
-		RValue<Long1> punpckhdq(RValue<Int2> x, RValue<Int2> y)
+		RValue<Short4> punpckhdq(RValue<Int2> x, RValue<Int2> y)
 		{
 			llvm::Function *punpckhdq = Intrinsic::getDeclaration(::module, Intrinsic::x86_mmx_punpckhdq);
 
-			return As<Long1>(V(::builder->CreateCall2(punpckhdq, As<MMX>(x).value, As<MMX>(y).value)));
+			return As<Short4>(V(::builder->CreateCall2(punpckhdq, As<MMX>(x).value, As<MMX>(y).value)));
 		}
 
 		RValue<Short4> punpcklbw(RValue<Byte8> x, RValue<Byte8> y)
@@ -7384,48 +7269,6 @@
 			}
 		}
 
-		RValue<UShort4> psrlw(RValue<UShort4> x, RValue<Long1> y)
-		{
-			llvm::Function *psrlw = Intrinsic::getDeclaration(::module, Intrinsic::x86_mmx_psrl_w);
-
-			return As<UShort4>(V(::builder->CreateCall2(psrlw, As<MMX>(x).value, As<MMX>(y).value)));
-		}
-
-		RValue<Short4> psraw(RValue<Short4> x, RValue<Long1> y)
-		{
-			llvm::Function *psraw = Intrinsic::getDeclaration(::module, Intrinsic::x86_mmx_psra_w);
-
-			return As<Short4>(V(::builder->CreateCall2(psraw, As<MMX>(x).value, As<MMX>(y).value)));
-		}
-
-		RValue<Short4> psllw(RValue<Short4> x, RValue<Long1> y)
-		{
-			llvm::Function *psllw = Intrinsic::getDeclaration(::module, Intrinsic::x86_mmx_psll_w);
-
-			return As<Short4>(V(::builder->CreateCall2(psllw, As<MMX>(x).value, As<MMX>(y).value)));
-		}
-
-		RValue<Int2> pslld(RValue<Int2> x, RValue<Long1> y)
-		{
-			llvm::Function *pslld = Intrinsic::getDeclaration(::module, Intrinsic::x86_mmx_psll_d);
-
-			return As<Int2>(V(::builder->CreateCall2(pslld, As<MMX>(x).value, As<MMX>(y).value)));
-		}
-
-		RValue<UInt2> psrld(RValue<UInt2> x, RValue<Long1> y)
-		{
-			llvm::Function *psrld = Intrinsic::getDeclaration(::module, Intrinsic::x86_mmx_psrl_d);
-
-			return As<UInt2>(V(::builder->CreateCall2(psrld, As<MMX>(x).value, As<MMX>(y).value)));
-		}
-
-		RValue<Int2> psrad(RValue<Int2> x, RValue<Long1> y)
-		{
-			llvm::Function *psrld = Intrinsic::getDeclaration(::module, Intrinsic::x86_mmx_psra_d);
-
-			return As<Int2>(V(::builder->CreateCall2(psrld, As<MMX>(x).value, As<MMX>(y).value)));
-		}
-
 		RValue<Int4> pmaxsd(RValue<Int4> x, RValue<Int4> y)
 		{
 			llvm::Function *pmaxsd = Intrinsic::getDeclaration(::module, Intrinsic::x86_sse41_pmaxsd);