Implement unrolling of loops using > or >=.

Bug swiftshader:53

Change-Id: I20500e567e58ed29caa0a0ad9ad7884e66e96cb9
Reviewed-on: https://swiftshader-review.googlesource.com/9811
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/compiler/OutputASM.cpp b/src/OpenGL/compiler/OutputASM.cpp
index da87532..8a84692 100644
--- a/src/OpenGL/compiler/OutputASM.cpp
+++ b/src/OpenGL/compiler/OutputASM.cpp
@@ -3517,7 +3517,7 @@
 				TIntermSequence &sequence = init->getSequence();
 				TIntermTyped *variable = sequence[0]->getAsTyped();
 
-				if(variable && variable->getQualifier() == EvqTemporary)
+				if(variable && variable->getQualifier() == EvqTemporary && variable->getBasicType() == EbtInt)
 				{
 					TIntermBinary *assign = variable->getAsBinaryNode();
 
@@ -3608,6 +3608,19 @@
 				comparator = EOpLessThan;
 				limit += 1;
 			}
+			else if(comparator == EOpGreaterThanEqual)
+			{
+				comparator = EOpLessThan;
+				limit -= 1;
+				std::swap(initial, limit);
+				increment = -increment;
+			}
+			else if(comparator == EOpGreaterThan)
+			{
+				comparator = EOpLessThan;
+				std::swap(initial, limit);
+				increment = -increment;
+			}
 
 			if(comparator == EOpLessThan)
 			{